Я прошел несколько циклов поиска способов сделать это. У меня до сих пор нет определенного ответа.
Последний цикл завершился процессом, основанным на файлах свойств. Идея заключалась в том, что каждый экземпляр сервера был настроен с одним файлом свойств, который настраивал все. Этот файл был прочитан сценариями запуска, настройкой параметров памяти, сервером приложений и самим приложением.
Ключевым моментом было то, что этот файл не управлялся напрямую. Скорее, это был продукт процесса сборки. У нас был ряд файлов для разных целей, которые контролировались версиями, и шаг сборки, который объединял соответствующие. Это позволяет вам выделить общие черты, общие для разных осей.
Например, у нас были среды разработки, непрерывной интеграции, QA, UAT, промежуточные и производственные среды, каждая со своей базой данных. Для серверов в разных средах требовались разные настройки базы данных, но каждый сервер в данной среде использовал одни и те же настройки. Итак, было что-то вроде development-db.properties, qa-db.properties и так далее. В каждой среде у нас было несколько видов серверов - веб-серверы, серверы управления контентом, серверы пакетных процессов и т. Д. Каждый из них имел настройки JVM для размера кучи и т. Д., Которые отличались от других типов серверов, но согласовывались между серверами по всему сред. Итак, у нас было что-то вроде web-jvm.properties, cms-jvm.properties, batch-jvm.properties и так далее. У нас также был способ иметь переопределения для определенных систем - например, production-cms-jvm.properties. У нас также были общие свойства, которые устанавливают общие свойства и разумные значения по умолчанию, которые могут быть переопределены при необходимости.
Наш процесс сборки был немного сложнее, чем просто выбор правильных опций из каждого набора; у нас был мастер-файл для каждого сервера в каждой среде, в котором указывалось, какие другие файлы включать. Мы позволили файлам указывать другие файлы для включения, поэтому мы могли построить график импорта для максимального повторного использования.
Все закончилось довольно сложно. Слишком сложно, я думаю. Но это сработало, и с его помощью было очень легко вносить изменения, влияющие на многие серверы контролируемым образом. Мы даже объединили набор входных файлов из разработки и другой из операций, которые содержали конфиденциальную информацию. Это был очень гибкий подход.