У нас было похожее требование к конфигурации при развертывании веб-приложения для разных разработчиков и на Amazon EC2: как мы отделим конфигурацию от двоичного кода? По моему опыту, JNDI слишком сложен и слишком сильно варьируется между контейнерами для использования. Кроме того, ручное редактирование XML очень восприимчиво к синтаксическим ошибкам, поэтому эта идея была отброшена. Мы решили это с помощью дизайна, основанного на нескольких правилах:
1) должны использоваться только простые имена = значения
2) новые конфигурации должны быть загружены путем изменения только одного параметра
3) наш WAR-файл должен быть реконфигурируемым без повторной упаковки
4) конфиденциальные параметры (пароли) никогда не будут упакованы в двоичный файл
Используя файлы .properties для всех настроек и используя System.getProperty("domain");
для загрузки соответствующих файлов свойств, мы смогли удовлетворить требования. Однако системное свойство не указывает на URL-адрес файла, вместо этого мы создали концепцию, которую мы называем «домен», чтобы указать используемую конфигурацию. Расположение конфигурации всегда:
$HOME/appName/config/$DOMAIN.properties
.
Поэтому, если я хочу запустить свое приложение, используя мою собственную конфигурацию, я запускаю приложение, задав домену свое имя:
-Ddomain=jason
при запуске приложение загружает файл:
/home/jason/appName/config/jason.properties
Это позволяет разработчикам совместно использовать конфигурации, чтобы мы могли воссоздать одно и то же состояние приложения для тестирования и развертывания без перекомпиляции или повторной упаковки. Затем значение домена используется для загрузки .properties из стандартного местоположения вне объединенного WAR.
Я могу полностью воссоздать производственную среду на своей рабочей станции, используя производственную конфигурацию, например:
-Ddomain=ec2
который загрузит:
/home/jason/appName/config/ec2.properties
Эта настройка позволяет нам иметь циклы dev / QA / release с точно-одним набором скомпилированных двоичных файлов, используя различные конфигурации в каждой среде. Нет риска, что пароли и т. Д. Будут связаны в двоичных файлах, и люди могут поделиться своими конфигурациями, чтобы воссоздать проблемы, которые мы наблюдаем.