私はBeanを構築するために、プロパティーfoo
を必要とするSpring 3.1 @Configuration
を持っています。このプロパティはdefaults.properties
で定義されていますが、アプリケーションにアクティブなoverride
スプリングプロファイルがある場合は、overrides.properties
のプロパティで上書きされる可能性があります。@PropertySourcesはSpringプロファイルによって選択できますか?
オーバーライドしないと、コードは次のようになり、仕事だろう...
@Configuration
@PropertySource("classpath:defaults.properties")
public class MyConfiguration {
@Autowired
private Environment environment;
@Bean
public Bean bean() {
...
// this.environment.getRequiredProperty("foo");
...
}
}
私は@Profile("overrides")
上@PropertySource
classpath:overrides.properties
のための偶発をしたいと思います。誰にどのようにこれを達成できるかについてのアイデアはありますか?私が考えてきたいくつかのオプションは、@Configuration
という重複ですが、DRYまたはプログラムによるConfigurableEnvironment
の操作に違反しますが、environment.getPropertySources.addFirst()
の呼び出しがどこに行くのかはわかりません。
プロパティを直接@Value
に挿入すると、次のように配置されますが、Environment
とメソッドを使用した場合は無効になります。
<context:property-placeholder ignore-unresolvable="true" location="classpath:defaults.properties"/>
<beans profile="overrides">
<context:property-placeholder ignore-unresolvable="true" order="0"
location="classpath:overrides.properties"/>
</beans>
更新
あなたは、今、これを行う春ブーツのYAML support、特に「を使用YAMLの代わりのプロパティ」セクションをチェックアウトしようとしている場合。そこでのプロファイルのサポートはこの疑問を解決するでしょうが、まだ@PropertySource
のサポートはありません。
理由を理解できませんこの回答には非常に多くのアップフォースがあります。プロファイル名をハードコーディングするのは、プロファイルのポイントに反します。 'spring.profiles.active'パラメータでプロファイルを指定するのと同じような方法はありませんか? – jjoller