Spring PropertySource отказывается расширять переменную более одного раза

1

Я пытаюсь создать класс конфигурации пружины следующим образом

@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, это делается по умолчанию с аннотацией?

Теги:
spring
spring-java-config

2 ответа

0
Лучший ответ

Оказывается, это была ошибка весной (как упоминалось в моем комментарии к сообщению ниже). Обновление до последней версии 3.X исправило проблему.

0

вы можете установить 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")
        });
  • 0
    К сожалению, поскольку bean-компонент PropertySourcesPlaceholderConfigurer должен быть статическим, он не может получить доступ к переменной dir String, и попытка сделать это статическим не работает, поскольку значение env еще не доступно. Это известная ошибка весной?
  • 0
    попробуйте использовать некоторый вспомогательный класс-оболочку для PropertySourcesPlaceholderConfigurer, а затем: @Bean public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer () {return PropertyLoadHelper.getPropertySourcesPlaceholderConfigurer (dir); }
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню