Spring配置文件可以选择@PropertySources吗?
我有一个Spring 3.1 @Configuration
,它需要一个属性foo
来构建bean。该属性在中定义,defaults.properties但是overrides.properties
如果应用程序具有活动的override
Spring概要文件,则该属性可以覆盖该属性。
没有覆盖,代码将看起来像这样,并且可以工作…
@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支持,特别是“使用YAML代替属性”部分。那里的个人资料支持将使这个问题无济于事,但是还没有@PropertySource
支持。
回答:
将覆盖添加到@PropertySource
静态内部类中。不幸的是,你必须一起指定所有属性源,这意味着创建一个“默认”配置文件来替代“替代”。
@Configurationpublic class MyConfiguration
{
@Configuration
@Profile("default")
@PropertySource("classpath:defaults.properties")
static class Defaults
{ }
@Configuration
@Profile("override")
@PropertySource({"classpath:defaults.properties", "classpath:overrides.properties"})
static class Overrides
{
// nothing needed here if you are only overriding property values
}
@Autowired
private Environment environment;
@Bean
public Bean bean() {
...
// this.environment.getRequiredProperty("foo");
...
}
}
以上是 Spring配置文件可以选择@PropertySources吗? 的全部内容, 来源链接: utcz.com/qa/431606.html