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配置中有效,但使用EnvironmentgetRequiredProperty()方法时则无效。

<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静态内部类中。不幸的是,你必须一起指定所有属性源,这意味着创建一个“默认”配置文件来替代“替代”。

@Configuration

public 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

回到顶部