Перезагрузка / обновление файла конфигурации Spring без перезапуска контейнера сервлета

Что ж, может быть полезно spring выполнить такую ​​перезагрузку spring контекста при тестировании spring-java-config вашего приложения.

Вы можете spring попробовать метод refresh одного spring-java-config из классов AbstractRefreshableApplicationContext: он не обновит spring-java-config ваши ранее созданные bean-компоненты, но spring-framework следующий вызов в контексте spring-config вернет обновленные beans.

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class ReloadSpringContext {

    final static String header = "\n" +
        "\n";

    final static String contextA =
        "\n" +
            "\t\t\n" +
        "";

    final static String contextB =
        "\n" +
            "\t\t\n" +
        "";

    public static void main(String[] args) throws IOException {
        //create a single context file
        final File contextFile = File.createTempFile("testSpringContext", ".xml");

        //write the first context into it
        FileUtils.writeStringToFile(contextFile, header + contextA);

        //create a spring context
        FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(
            new String[]{contextFile.getPath()}
        );

        //echo the bean 'test' on stdout
        System.out.println(context.getBean("test"));

        //write the second context into it
        FileUtils.writeStringToFile(contextFile, header + contextB);

        //refresh the context
        context.refresh();

        //echo the bean 'test' on stdout
        System.out.println(context.getBean("test"));
    }

}

И spring вы получите вот такой результат

fromContextA
fromContextB

Другой spring-config способ добиться этого (и, возможно, более spring-java-config простой) - использовать функцию spring-java-config Refreshable Bean в Spring spring 2.5+. С помощью динамического spring-java-config языка (Groovy и т. Д.) И spring-config Spring вы даже можете изменить spring-java-config поведение bean-компонентов. Взгляните spring-config на spring reference for dynamic language:

24.3.1.2. Освежающие spring-java-config бобы

Один из (если не самый) убедительные spring-framework преимущества динамичного языковая spring-framework поддержка в Spring - это функция spring-config "обновляемых компонентов".

Обновляемый spring-java-config компонент - это компонент spring на основе динамического языка, который spring-config с небольшой объем конфигурации, bean-компонент spring-framework с динамическим языком может отслеживать spring-config изменения в его основе исходный spring-framework файловый ресурс, а затем spring-framework перезагрузить сам, когда spring-config динамический язык исходный spring-config файл изменен (например когда spring разработчик редактирует и spring-framework сохраняет вносит изменения spring-framework в файл на файловая система).

spring

2022-09-12T09:42:41+00:00
Вопросы с похожей тематикой, как у вопроса:

Перезагрузка / обновление файла конфигурации Spring без перезапуска контейнера сервлета