Автоматическая повторная инициализация конфигурации в Spring

В Log4j есть функция, при которой система может быть инициализирована для выполнения настройки и наблюдения с интервалом. Это позволяет системе log4j перезагружать свои свойства при изменении файла свойств. Имеется ли в Spring framework такое средство наблюдения за конфигурацией, в котором конфигурация перезагружается при ее изменении. Конфигурация, которая требует перезагрузки, - это не файл Springs applicationContext.xml, а различные другие файлы конфигурации, которые инициализируются с помощью компонентов инициализации Spring.

12
0
17 870
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

AFAIK Spring не предоставляет такой утилиты. Однако существует сторонний инструмент JRebel, который позволяет обновлять все веб-приложение (включая конфигурацию Spring) без перезапуска сервера.

Доступна бесплатная пробная версия, и цена покупки довольно низкая.

Ответ принят как подходящий

Я нашел утилиту, которая делает что-то похожее на Log4J здесь. По сути, это расширение PropertyPlaceholderConfigurer, которое перезагружает свойства при их изменении.

Это было адаптировано в github.com/Unicon/springframework-addons/wiki/…

Vadzim 29.08.2014 20:18

@Vadzim ссылка мертва! Это может помочь нам в приведенном выше случае projects.spring.io/spring-cloud/spring-cloud.html

pramodc84 22.12.2017 11:49

Я был бы особенно осторожен с перезагрузкой контекста приложения Spring.

Что вы ожидаете увидеть с singleton beans? Если объект имеет ссылку на одноэлементный компонент, следует ли его обновлять?

Я не хочу перезагружать spring applicationcontext.xml или какой-либо из уже загруженных компонентов Spring. Я опробую решение, опубликованное Филлом Сакром.

zkarthik 23.01.2009 17:49

Я разрабатываю с использованием JRebel, и я бы очень опасался, что он обновит вашу конфигурацию. Хорошо работает с Java, но не со Spring.

Если вы хотите добавить контекст, я сделал это следующим образом:

public class ApplicationContextUtil
{
   static String[] configFiles = {"applicationContextParent.xml"};

   private static ApplicationContext context = null;

   static
   {
       context = new ClassPathXmlApplicationContext ( configFiles );
   }

   public static void addContext( String[] newConfigFiles )
   {
       // add the new context to the previous context
       ApplicationContext newContext =  new ClassPathXmlApplicationContext ( newConfigFiles, context );
       context = newContext;
   }   
   public static ApplicationContext getApplicationContext ()
   {
       // return the context
       return context;
   }
}

Это ваш класс поставщика контекста. Подробности можно посмотреть на мой блог

Другие вопросы по теме