У меня есть 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
.