2014-01-10 2 views
0

Мне было интересно, можно ли динамически изменять значение переменной среды без перезапуска сервера, чтобы можно было получить доступ к различным файлам свойств на основе значения текущего установленная среда.Динамическое переключение между файлами свойств путем изменения имени среды весной

Рассмотрим эти две мои файлы свойств:

config-dev.properties 
config-prod.properties 

Теперь, поскольку я приложил имя окружающей среды с каждым файлом, так что я хочу знать, что это возможно, что я динамически изменять или устанавливать значение имя среды и соответствующий файл свойств будут использоваться без перезапуска сервера.

Я знаю, как установить env.name в файле конфигурации XML.

<context:property-placeholder location="classpath:/config-${env.name}.properties> 

Я хочу программно изменить имя среды, чтобы при ее доступе можно было использовать правильный файл свойств.

+0

<контекст: property-placeholder location = "classpath:/config - $ {env.name} .properties> - это один из способов сделать это, где ваше env.name - это конфигурация запуска, которая может быть установленным параметром запуска. . Другой способ сделать это - использовать профиль Spring bean Profile, где вы определяете профиль, а бобы, определенные для этого профиля, будут загружаться во время запуска контейнера Spring. Поскольку ваш контейнер Spring уже запущен, а бобы - уже загружен, теперь вы хотите загрузить другой набор компонентов без перезапуска контейнера Spring. Я не уверен в этом. – Hrishikesh

+0

@Hrishikesh моя проблема заключается только в том, что мне нужно сделать это без перезапуска приложения или сервера. –

+0

Итак u использует тот же сервер для Prod, а также DEv – Anubhab

ответ

0

<context:property-placeholder location="classpath:/config-${env.name}.properties> - это один из способов сделать это. где ваше env.name - это конфигурация запуска, может быть установленным параметром запуска.

Другой способ сделать это - использовать профиль весенней фасоли. где вы определяете профиль, а бобы, определенные для этого профиля, будут загружены во время запуска контейнера Spring.

<beans profile="dev"> 
    <bean .... /> 
<context:property-placeholder 
    location="classpath:conf/properties/dev.properties" /> 
</beans> 

<beans profile="prod"> 
    <bean .... /> 
<context:property-placeholder 
    location="classpath:conf/properties/prod.properties" /> 
</beans> 

Я не уверен в изменении его, не перезагружая сервер. поскольку ваш контейнер Spring уже запущен, а бобы уже загружены. теперь вы хотите загрузить другой набор компонентов без перезапуска контейнера Spring. Я не уверен в этом.

Основная причина этого в зависимости от меня будет заключаться в том, как вы измените уже автономные зависимости во время выполнения, не затрагивая другие запущенные классы приложений? Что относительно выполняемой функции и вы хотите изменить URL-адрес БД через коммутатор в файле свойств? Как вы это контролируете?

+0

Я не хочу перезапускать зависимые от автозагрузки и bean-компоненты вместо этого. Я хочу изменить только файл свойств, который будет использоваться, потому что этот файл свойств может иметь параметр для URL-адреса интеграции PayPal, поэтому paypal также предлагает режим песочницы так что мне нужно переключаться между этими режимами динамически либо путем переключения имени файла свойств, либо путем изменения имени переменной env. –

+0

Я хорошо знаю об этом **

Смежные вопросы