12

让此类覆盖另一个 Config 类中已设置的 @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:我确定我错过了一些东西,但无法弄清楚它是什么,任何帮助都会很棒。

4

3 回答 3

4

我想我终于找到了问题1的答案:

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

它还没有在 Spring 中出现,它被提议作为一个小改进。希望能够在未来的版本中很快看到添加到注释的附加属性。

SPR-8371

仍然不确定完成上述场景的方法,也没有问题 2 的答案。

于 2013-01-09T17:50:37.440 回答
1

如果您必须坚持使用 Spring 3,则不是真正的解决方案,而是一种解决方法:使用存在的虚拟默认值,即在您的情况下:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" })
于 2014-12-15T09:52:27.180 回答
0

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

new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };
于 2014-05-22T09:37:51.883 回答