В Log4j есть функция, при которой система может быть инициализирована для выполнения настройки и наблюдения с интервалом. Это позволяет системе log4j перезагружать свои свойства при изменении файла свойств. Имеется ли в Spring framework такое средство наблюдения за конфигурацией, в котором конфигурация перезагружается при ее изменении. Конфигурация, которая требует перезагрузки, - это не файл Springs applicationContext.xml, а различные другие файлы конфигурации, которые инициализируются с помощью компонентов инициализации Spring.
AFAIK Spring не предоставляет такой утилиты. Однако существует сторонний инструмент JRebel, который позволяет обновлять все веб-приложение (включая конфигурацию Spring) без перезапуска сервера.
Доступна бесплатная пробная версия, и цена покупки довольно низкая.
Я нашел утилиту, которая делает что-то похожее на Log4J здесь. По сути, это расширение PropertyPlaceholderConfigurer, которое перезагружает свойства при их изменении.
@Vadzim ссылка мертва! Это может помочь нам в приведенном выше случае projects.spring.io/spring-cloud/spring-cloud.html
@ pramodc84, обновленные ссылки: maven-repository.com/artifact/net.unicon.springframework/…, github.com/UniconLabs/springframework-addons/blob/master/src /…, github.com/knightliao/disconf/blob/master/disconf-client/src /…
Я был бы особенно осторожен с перезагрузкой контекста приложения Spring.
Что вы ожидаете увидеть с singleton beans? Если объект имеет ссылку на одноэлементный компонент, следует ли его обновлять?
Я не хочу перезагружать spring applicationcontext.xml или какой-либо из уже загруженных компонентов Spring. Я опробую решение, опубликованное Филлом Сакром.
Я разрабатываю с использованием 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;
}
}
Это ваш класс поставщика контекста. Подробности можно посмотреть на мой блог
Это было адаптировано в github.com/Unicon/springframework-addons/wiki/…