PropertyPlaceholderConfigurer
ответ , но я бы предположил, что вам бы хотелось, чтобы это произошло без необходимости обновлять файл свойств для каждой среды.Поэтому
Мое предложение будет выглядеть следующим образом
- Использование
PropertyPlaceholderConfigurer
, но не создавать файл свойств
- По умолчанию
PropertyPlaceholderConfigurer
сначала пытается найти значение в файле свойств, но если это не удается, он будет искать один в свойствах системы
Так все, что вам нужно сделать, это определить как бобы так же, как вы делаете это, то есть dev
и stag
.. Это прекрасный подход, так как вы четко показываете различные конфигурации ... это поможет, если вы также добавили некоторый псевдоним, чтобы четко показать настройку, которую вы хотите использовать.
Далее передайте системное свойство, определяющее, в каком режиме вы находитесь ... и в идеале явно задайте PropertyPlaceholderConfigurer
для использования свойств системы.
Так .. Ваш конфиг будет выглядеть что-то вроде этого
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
systemPropertiesMode="2"/>
<bean id="Mybean" class="Bean">
<property name="config" ref="${launch.mode}"/>
</bean>
<bean id="dev" name="dev_mode" class="Dev">
<property name="x" ref="Dev1">
<property name="y" ref="Dev2">
<property name="z" ref="Dev3">
</bean>
<bean id="stag" name="staging_mode" class="Dev">
<property name="x" ref="Stag1">
<property name="y" ref="Stag2">
<property name="z" ref="Stag3">
</bean>
Вы можете передать в собственность при запуске в следующем виде
-D<property-name>=<value>
Так что в этом случае вы будете использовать
-Dlaunch.mode=dev_mode
Или
-Dlaunch.mode=staging_mode
И вам не нужно прикасаться ни к одному из файлов конфигурации.
Просто еще замечание по systemPropertiesMode
, принятым значениям являются следующим:
- 0 - не смотреть в свойствах системы
- 1 - использование системных свойств в качестве запасного варианта (то есть, если не найдено в файлах свойства)
- 2 - свойства системы всегда отменяют (режим я предлагаю)
Надеются, что это помогает :)
Примечание: Настоящая рекомендация применима только к весне < 3.1, поскольку начиная с 3.1 рекомендуется использовать @Profile
Нет такой вещи, как Spring 2.1. Там 2.0 и 2.5. Вы имеете в виду 3.1? – skaffman
Вы используете Maven? –