12

このクラスを使用して、別の Config クラスで既に設定されている @PropertySource をオーバーライドします。

@Configuration
@PropertySource({ "classpath:${env.placeholder}/app.properties" })
public class PropertyOverrideConfig {

}

ただし、ファイルまたはプレースホルダーが見つからない場合は常に、コンテキストの読み込みに失敗します。プロパティが見つからない場合にスキップするように、その注釈が読み込まれたプロパティに次のフラグを設定する必要があります。

        setIgnoreResourceNotFound(true);
        setIgnoreUnresolvablePlaceholders(true);

質問 1: @PropertySource にこれらのフラグを設定する適切な方法は何ですか?

更新:このページ を参照する注釈なしで同じクラスに @Bean を追加しようとしましたが、プロパティ ファイルも選択されていません。私はxml構成を持っていません。

@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
     final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();

     Resource[] resources = new ClassPathResource[ ] { 
                  new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };

     pspc.setLocations( resources );
     pspc.setIgnoreResourceNotFound(true);
     pspc.setIgnoreUnresolvablePlaceholders(true);
     return pspc;
}

質問 2: 私は何かが欠けていると確信していますが、それが何であるかを理解できませんでした。

4

3 に答える 3

4

私は最終的に質問1の答えを見つけたと思います:

を通じて追加されたプロパティの無視フラグを設定する方法は@PropertySource?

春にはまだありませんが、マイナーな改善として提案されています。今後のリリースで、注釈に追加された追加の属性をすぐに確認できるようになることを願っています。

SPR-8371

上記のシナリオを達成する方法についてはまだ確信が持てず、質問2に対する回答はありません。

于 2013-01-09T17:50:37.440 に答える
1

実際には解決策ではありませんが、Spring 3 に固執する必要がある場合の回避策: 存在するダミーのデフォルトを使用します。つまり、あなたの場合:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" })
于 2014-12-15T09:52:27.180 に答える
0

を削除classpath:してみてください。使用する場合は必要ありませんClassPathResource:

new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };
于 2014-05-22T09:37:51.883 に答える