2013-01-08 7 views
11

このクラスを使用すると、別のConfigクラスの@PropertySourceを既に設定済みにすることができます。Spring 3.1をオーバーライドする方法IgnoreResourceNotFoundとIgnoreUnresolvablePlaceholdersを設定する@PropertySource

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

} 

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

 setIgnoreResourceNotFound(true); 
     setIgnoreUnresolvablePlaceholders(true); 

Question1:何が@PropertySourceためにこれらのフラグを設定するための適切な方法だろうか?

更新: は、それがいずれかのプロパティファイルを選んされていない、thisページを参照すること、注釈なしで同じクラスに@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; 
} 

Question2:私はすべてのヘルプは素晴らしいことだ、私は何かが欠けてる確信しているが、それが何であるかを見つけ出すことができませんでした。

+0

他のPropertySourcesPlaceholderConfigurerインスタンスが登録されていませんか?たぶんPropertySourcesPlaceholderConfigurerを静的に返す '@ Bean'アノテートメソッドを作るべきでしょう(' @ Bean'のためのjava docが推奨するように) –

+0

ありがとう@BorisTreukhov、私は投稿時に静的を逃しました。その間、もし私が同じ 'PropertySourcesPlaceholderConfigurer'をすでに別のConfigに登録していたら、何が起こりますか? – raksja

+0

私は正確に覚えていませんが、いくつかのPropertySourcesPlaceholderConfigurersを持つことができます(プレースホルダプレフィックス/サフィックスを別々に指定することもできます)。おそらくプレースホルダーが解決できないプレースホルダーについて別のプレースホルダー設定をしています –

答えて

4

は、私は私が最終的にQuestion1のための答えを考え出したと思う:

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

そのないが、まだ、そのはマイナー 改善として提案されて。今後のリリースですぐにアノテーションに追加の属性 が追加されることを期待しています。それでも

SPR-8371

ない言及したシナリオとQuestion2のための無応答を実現する方法について確認してください。

+1

[SPR-10325] ://jira.springsource.org/browse/SPR-10325): "@PropertySourceのignoreResourceNotFoundを許可する"、それに投票してください! – Robin

0

ClassPathResourceを使用した場合、それが必要とされていない、classpath:を削除してください:

new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 
1

そうでもない解決策が、回避策は、あなたが春3に固執する必要がある場合:存在するダミーデフォルトを使用し、すなわちあなたの場合:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" }) 
関連する問題