2016-08-10 17 views
1

Springを使用し、プロパティを配線するのにPropertySourcesPlaceholderConfigurerを使用します。現在、我々はsetIgnoreUnresolvablePlaceholderstrueに設定しました。これは、プロパティが見つからない場合にだけアプリケーションを続けることができます。不足しているSpringプロパティの警告

私はそれだけでアプリがクラッシュする方が良いと思うが、我々は現時点では危険なまでこれを見つけるので、私たちは中間体溶液たいと思います:欠落しているプロパティに警告を。

宿泊施設が不足していることを警告またはエラーレベルのログメッセージをしたいと思いますが、アプリはまだ開始するための最善の努力を行う必要があります。

は春4とJava 8で、このことは可能ですか? PropertySourcesPlaceHolderConfigurerのソースで

+0

...

たぶん
String resolved = (ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal)); if(strVal.equals(resolved)) { LOG.warn("Property "+ strVal+ " could not be found"); 

ない最も簡単な解決策となり、我々はの鮮明な画像を持っている...その方法あなたが言っていること – Sohlowmawn

答えて

2

見て、特にprocessProperties方法:

protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, 
     final ConfigurablePropertyResolver propertyResolver) throws BeansException { 

    propertyResolver.setPlaceholderPrefix(this.placeholderPrefix); 
    propertyResolver.setPlaceholderSuffix(this.placeholderSuffix); 
    propertyResolver.setValueSeparator(this.valueSeparator); 

    StringValueResolver valueResolver = new StringValueResolver() { 
     @Override 
     public String resolveStringValue(String strVal) { 
      String resolved = (ignoreUnresolvablePlaceholders ? 
        propertyResolver.resolvePlaceholders(strVal) : 
        propertyResolver.resolveRequiredPlaceholders(strVal)); 
      if (trimValues) { 
       resolved = resolved.trim(); 
      } 
      return (resolved.equals(nullValue) ? null : resolved); 
     } 
    }; 

    doProcessProperties(beanFactoryToProcess, valueResolver); 
} 

あなたはそれが簡単なチェックが含まれていることを見ることができます。
はまた、この方法はを保護されていることがわかります。
解決策は、メソッドをオーバーライドする独自のPropertySourcesPlaceHolderConfigurerサブクラスを作成することです。 これにはまったく同じコードが含まれていますが、警告が記録されます。

ので

String resolved = (ignoreUnresolvablePlaceholders ? 
     propertyResolver.resolvePlaceholders(strVal) : 
     propertyResolver.resolveRequiredPlaceholders(strVal)); 

そして、いくつかのコードを共有するためにいいだろう

+0

ありがとう、これは働いた。多くの文字列(主にパッケージ名、空の文字列など)が春のフレームワークで解決されていることが分かりましたので、それをフィルタリングしなければなりませんでした。私は春のプロパティプレースホルダの正規表現チェックを追加しました –

関連する問題