У меня есть Spring 3.1 @Configuration, которому требуется свойство foo для построения bean. Свойство определено в defaults.properties, но может быть переопределено свойством в overrides.properties, если приложение имеет активный профиль override Spring.
Без переопределения код будет выглядеть так и работать...
@Configuration
@PropertySource("classpath:defaults.properties")
public class MyConfiguration {
@Autowired
private Environment environment;
@Bean
public Bean bean() {
...
// this.environment.getRequiredProperty("foo");
...
}
}
Я хотел бы @PropertySource для classpath:overrides.properties контингента на @Profile("overrides"). Есть ли у кого-нибудь идеи о том, как это можно достичь? Некоторые параметры, которые я рассмотрел, являются дубликатами @Configuration, но это будет нарушать DRY или программные манипуляции с ConfigurableEnvironment, но я не уверен, куда будет идти вызов environment.getPropertySources.addFirst().
Размещение следующего в конфигурации XML работает, если я вставляю свойство непосредственно с помощью @Value, но не тогда, когда я использую метод Environment и getRequiredProperty().
<context:property-placeholder ignore-unresolvable="true" location="classpath:defaults.properties"/>
<beans profile="overrides">
<context:property-placeholder ignore-unresolvable="true" order="0"
location="classpath:overrides.properties"/>
</beans>
Обновление
Если вы пытаетесь сделать это сейчас, ознакомьтесь с Spring Boot поддержкой YAML, в частности "Использование YAML вместо свойств", раздел. Поддержка профиля там сделает этот вопрос спорным, но пока не поддерживается @PropertySource.