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

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

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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;
   }
}

Это ваш класс поставщика контекста. Для получения дополнительной информации вы можете посмотреть мой блог