让这个类覆盖另一个Config类中已设置的@PropertySource。
@Configuration
@PropertySource({ "classpath:${env.placeholder}/app.properties" })
public class PropertyOverrideConfig {
}
但是,只要缺少文件或占位符,它就无法加载上下文。我需要将以下标志设置为该注释加载属性,以便在它无法找到属性时跳过它。
setIgnoreResourceNotFound(true);
setIgnoreUnresolvablePlaceholders(true);
问题1:为@PropertySource设置这些标志的适当方法是什么?
更新 尝试将@Bean添加到同一个类而没有引用this页面的注释,它也没有选择属性文件。我没有xml配置。
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[ ] {
new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };
pspc.setLocations( resources );
pspc.setIgnoreResourceNotFound(true);
pspc.setIgnoreUnresolvablePlaceholders(true);
return pspc;
}
问题2:我确信我错过了什么,但无法弄清楚它是什么,任何帮助都会很棒。
答案 0 :(得分:4)
我想我终于找到了问题1的答案:
如何设置通过@PropertySource
添加的属性的忽略标记?
它仍然没有在春天,它被提议作为未成年人 改进。希望能够看到一个额外的属性 在将来的版本中很快就会添加到注释中。
<强> SPR-8371 强>
仍然不确定完成所述方案的方法,也没有回答问题2。
答案 1 :(得分:1)
不是真正的解决方案,而是一种解决方法,如果您必须坚持使用Spring 3:使用虚拟默认值,即存在,即在您的情况下:
@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" })
答案 2 :(得分:0)
尝试删除classpath:
,使用ClassPathResource
:
new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };