【发布时间】:2012-09-23 09:30:49
【问题描述】:
我有一个 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");
...
}
}
我想要一个@PropertySource 用于classpath:overrides.properties,取决于@Profile("overrides")。有没有人对如何实现这一点有任何想法?我考虑过的一些选项是重复的 @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 support,尤其是“使用 YAML 代替属性”部分。那里的个人资料支持会让这个问题变得毫无意义,但还没有@PropertySource 支持。
【问题讨论】:
标签: spring