Ответ
Такая необходимость возникает при развертывании приложения в виде WAR-архива на сервере приложений (Apache Tomcat, Jetty, WildFly, WebLogic) или в контейнере сервлетов.
Почему именно там:
- Архив (WAR) представляет собой собранный и скомпилированный код.
- Конфигурационные XML-файлы (например,
WEB-INF/web.xml,WEB-INF/applicationContext.xml) упакованы внутри архива и могут быть извлечены, отредактированы, и контекст приложения перезапущен без повторной сборки всего проекта.
Типичные конфигурационные файлы для "горячего" изменения:
web.xml— дескриптор развертывания веб-приложения.applicationContext.xml— конфигурация бинов Spring.persistence.xml— настройки JPA (поставщик, свойства Hibernate).*-servlet.xml— конфигурация DispatcherServlet в Spring MVC.
Пример: Изменение строки подключения к БД в applicationContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="url" value="jdbc:postgresql://OLD_HOST:5432/db"/>
<!-- Меняем значение на новое без перекомпиляции -->
<property name="url" value="jdbc:postgresql://NEW_HOST:5432/db"/>
</bean>
Как внедрять изменения: Значения часто выносят в property-файлы или переменные окружения, которые можно менять на сервере:
<property name="url" value="${DB_URL}"/>