Я несколько раз сталкивался с одной и той же проблемой, и мне хотелось бы узнать, что другие люди думают об этой проблеме:
Предположим, у нас есть приложение Spring, упакованное как файл .war , и мы хотим запустить его в нескольких средах . (Разработка / тест / preprod / прод / и т.д.)
Для доступа к инфраструктуре, необходимой для приложения (базы данных / веб-сервисы и т. Д.), Мы храним информацию о доступе в файлах конфигурации, также в этих файлах находится некоторая бизнес-конфигурация.
Допустим, мы используем .properties файлы для этой цели (потому что у нас есть весеннее приложение во время войны, и нам нравится, когда свойства читаются однострочными в appcontext)
и также предположим, что в разных средах у нас нет одного и того же контейнера appserver / servlet. (например: dev, test: jetty, preprod: tomcat, prodd: glassfish)
Обычно я делал несколько профилей Maven , по одному для каждой среды, необходимую конфигурацию в соответствующих файлах для каждого.
Теперь недавно я столкнулся с вопросом от парня, выполняющего операции:
«Итак, действительно ли мы должны генерировать новую сборку с соответствующим профилем на сервере сборки, если БД изменяется в среде preprod?»
Я ответил: «Нет, вы можете перейти к ... / webapps / currentApp / WEB-INF / classes / config / application.properties и изменить там значения, а затем перезапустить контейнер"
Мы придумали решение, которое решает некоторые аспекты этой проблемы:
используя плагин сборки Maven, мы встраиваем Jetty в войну, которая делает его пригодным для использования в качестве «исполняемой» войны, а также дает нам возможность иметь глобальную конфигурацию XML,
из которого стартер встроенной Jetty создает / изменяет соответствующие файлы .properties в разобранном каталоге war и только затем запускает приложение.
Но, опять же, это не решает проблему, если вы хотите использовать что-то еще, кроме Jetty.
Как все сталкиваются с одинаковой ситуацией?