Подтвердить что ты не робот

Как переопределить Spring 3.1 @PropertySource для установки IgnoreResourceNotFound & IgnoreUnresolvablePlaceholders

Наличие этого класса для переопределения уже установленного @PropertySource в другом классе Config.

@Configuration
@PropertySource({ "classpath:${env.placeholder}/app.properties" })
public class PropertyOverrideConfig {

}

Но всякий раз, когда отсутствует файл или заполнитель, он не выполняет загрузку контекста. Мне нужно установить следующие флаги в это свойство, загруженное аннотацией, чтобы оно пропустило, если оно не сможет найти свойство.

        setIgnoreResourceNotFound(true);
        setIgnoreUnresolvablePlaceholders(true);

Question1: Каким будет подходящий способ установить эти флаги для источника @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;
}

Question2: Я уверен, что я что-то упустил, но не мог понять, что это такое, любая помощь будет большой.

4b9b3361

Ответ 1

Я думаю, что, наконец, я понял ответ на вопрос 1:

Как установить флаги Ignore для свойств, добавленных через @PropertySource?

Его еще нет в Spring, его предложили в качестве Малой Улучшение. Надеюсь, вы сможете увидеть дополнительный атрибут добавлен в аннотацию в ближайшее время в будущем выпуске.

SPR-8371

Все еще не уверен в том, как выполнить описанный сценарий, и ответа на Question2 нет.

Ответ 2

Не решение, но обходное решение, если вам нужно придерживаться Spring 3: использовать фиктивный по умолчанию, который существует, т.е. в вашем случае:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" })

Ответ 3

Попробуйте удалить classpath:, при использовании ClassPathResource не требуется:

new ClassPathResource( "classpath:${env.placeholder}/app.properties" ) };