Я пытаюсь создать класс конфигурации пружины следующим образом
@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
Является ли это ошибкой/ограничением в реализации? Есть ли способ обойти это?
Также я не могу найти способ установить ignore-unresolvable = true в аннотации, как вы можете в xml, это делается по умолчанию с аннотацией?
Оказывается, это была ошибка весной (как упоминалось в моем комментарии к сообщению ниже). Обновление до последней версии 3.X исправило проблему.
вы можете установить ignoreUnresolvable следующим образом:
@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = PropertyLoadHelper.getPropertySourcesPlaceholderConfigurer();
propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(true);
return propertySourcesPlaceholderConfigurer;
}
В качестве обходного пути для расширения ценностей вы можете попытаться использовать
@Value(${my.dir})
private String dir;
а затем использовать его в конфигурации компонента:
propertySourcesPlaceholderConfigurer.setLocations(new ClassPathResource[]{
new ClassPathResource("config/"+dir+ "filename1" + ".properties"),
new ClassPathResource("config/"+dir+ "filename2" + ".properties")
});