如何覆盖弹簧3.1 @PropertySource设置IgnoreResourceNotFound&

2019-08-06 02:13发布

有了这个类来覆盖另一个配置类已设置@PropertySource。

@Configuration
@PropertySource({ "classpath:${env.placeholder}/app.properties" })
public class PropertyOverrideConfig {

}

但每当文件或占位符丢失,其失败的情况下加载。 我需要以下标志设置为注释加载属性,所以它会跳过,如果不能够找到的财产​​。

        setIgnoreResourceNotFound(true);
        setIgnoreUnresolvablePlaceholders(true);

问题1:什么是设置这些标志为@PropertySource适当的方式吗?

更新:尝试添加一个@Bean同一类而没有注释引用此页面,不采摘属性文件要么。 我没有一个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:我相信,我失去了一些东西,但无法弄清楚它是什么,任何帮助将是巨大的。

Answer 1:

我想,我终于想通了对问题1回答:

如何设置忽略标志的特性,通过添加@PropertySource

它在春天不是还有,它被提议作为一个小型的改善。 希望将能够看到未来发布不久加入到注释的附加属性。

SPR-8371

仍不能确定完成提到的场景的方式,没有答案问题2。



Answer 2:

不是一个真正的解决方案,但有解决方法,如果你要坚持到春天3:使用虚拟默认情况下,它存在,即你的情况:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" })


Answer 3:

尝试删除classpath: ,它不需要使用时ClassPathResource

new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };


文章来源: How to override Spring 3.1 @PropertySource to set IgnoreResourceNotFound & IgnoreUnresolvablePlaceholders