Как переопределить 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: Я уверен, что я что-то упустил, но не мог понять, что это такое, любая помощь будет большой.
Ответы
Ответ 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" ) };