У меня есть весна 3.1 @Configuration
, которая нуждается в собственности foo
, чтобы построить фасоль. Свойство определено в defaults.properties
, но может быть переопределено свойством в overrides.properties
, если приложение имеет активный профиль Spring override
.Can @PropertySources выбирается по весеннему профилю?
Без переопределения, код будет выглядеть следующим образом, и работа ...
@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>
Update
Если вы пытаетесь сделать это сейчас, проверить Spring ботинка YAML support, в частности, 'Использование YAML вместо Properties' раздел. Поддержка профиля там сделает этот вопрос спорным, но поддержки @PropertySource
пока нет.
Не могу понять, почему этот ответ получил так много оборотов. Жестко-кодирование имен профиля относится к точкам профилей. Не существует ли аналогичного способа, позволяющего указать профиль через параметр «spring.profiles.active»? – jjoller