我正在尝试以下列方式创建一个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的方法,这是否默认使用注释完成?
答案 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解决了这个问题。