如何覆盖Spring 3.1 @PropertySource来设置IgnoreResourceNotFound& IgnoreUnresolvablePlaceholders

时间:2013-01-08 21:41:11

标签: java spring spring-mvc properties configuration

让这个类覆盖另一个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:我确信我错过了什么,但无法弄清楚它是什么,任何帮助都会很棒。

3 个答案:

答案 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" ) };