Spring PropertySource拒绝不止一次扩展变量

时间:2014-05-26 15:53:22

标签: java spring spring-java-config

我正在尝试以下列方式创建一个spring配置类

@Configuration
@PropertySource(value={"file:${my.dir}/fileone.properties","file:${my.dir}/filetwo.properties"})
@Lazy(value=true)
public class SpringBeans {

    @Autowired
    Environment env;

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
        PropertySourcesPlaceholderConfigurer ppc = new PropertySourcesPlaceholderConfigurer();
        return ppc;
    }

    @Bean.....
}

问题是变量$ {my.dir}被扩展,以便找到fileone.properties但它会立即抛出

java.io.FileNotFoundException: ${my.dir}/filetwo.properties (No such file or directory)

我正在使用spring 3.1.1.RELEASE和Oracle JDK 7

这是实施中的错误/限制吗?有什么方法吗?

另外我找不到像在xml中那样在注释中设置ignore-unresolvable = true的方法,这是否默认使用注释完成?

2 个答案:

答案 0 :(得分:0)

你可以像这样设置ignoreUnresolvable:

@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = PropertyLoadHelper.getPropertySourcesPlaceholderConfigurer();
    propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(true);
    return propertySourcesPlaceholderConfigurer;

}

作为扩展值的解决方法..您可以尝试使用

@Value(${my.dir})
private String dir;

然后在bean配置中使用它:

propertySourcesPlaceholderConfigurer.setLocations(new ClassPathResource[]{
                new ClassPathResource("config/"+dir+ "filename1" + ".properties"),
                new ClassPathResource("config/"+dir+ "filename2" + ".properties")
        });

答案 1 :(得分:0)

原来这是Spring中的一个错误(正如我在下面的帖子中的评论中提到的)。升级到最新的3.X解决了这个问题。