我有一个Spring 3.1的@Configuration
,需要一个属性foo
来构建bean。该属性在defaults.properties
中定义,但如果应用程序有一个活动的override
Spring配置文件,则可以被overrides.properties
中的属性覆盖。
没有覆盖时,代码看起来像这样,并且可以正常工作......
@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
直接注入属性,则在XML配置文件中放置以下内容有效,但是如果我使用Environment
和getRequiredProperty()
方法,则无效。<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>
更新
如果您现在正在尝试这样做,请查看Spring Boot的YAML支持,特别是“使用YAML而不是属性”部分。那里的配置文件支持将使这个问题变得无关紧要,但目前还没有@PropertySource
支持。