Что стоит использовать для сложных конфигурационных файлов (Java, Tomcat)?
Коллеги, привет!
Я всегда разрабатывал на Java SE или делал отдельные узконаправленные сервисы на Java EE (наследуемся от ICustomersService, собираем maven'ом, выкладываем war в Tomcat), но сейчас возник вопрос. Ситуация такая.
У меня есть Java-приложение, чей war-файл запускается через Tomcat. Оказалось, что в этом приложении очень много чего нужно конфигурировать. Причем, вопрос не в том, что нужно просто передать через DI какую-нибудь стратегию в Singleton, а более сложные моменты. То есть хочется просто что-то поменять в конфиг-файле, который лежит где-нибудь рядом с war, возможно, перезапустить приложение через bin/shutdown и потом bin/startup и чтобы все настройки применились. Например:
1. Нужно уметь передать в различные классы константы.
2. Возможность передать несколько стратегий в Singleton.
3. В Singleton нужно передать набор объектов (от 1 до "бесконечности"), которые потом сами распределятся по нужным местам кода. Причем в каждом объект должна быть возможность передать константы или стратегии.
Какие технологии лучше всего использовать? Мне нужно что-то нибудь удобное и простое в освоении.
Не понимаю, почему задача не решается через DI? Наприер, берется Спринг, зачитываются проперти через, util:properties + context:property-placeholder и рассовываются потом по бинам.
А я могу положить конфиг вне war-файла? Или нужно будет каждый раз заходить в архив и править там? Если только править в архиве, то дополнительный минус, что на сервере нельзя хранить отдельный продакшн-конфиг, а при разработке использовать другой.
Может быть есть более красивый вариант, чем Spring? Я когда-то давно его использовал - достаточно громоздкие файлы получаются.
А можно попросить пример из п. 3? Как это лучше всего сделать на Spring? Сходу у меня нагуглить не получилось. Уточняю - мне нужно инициализировать несколько простых объектов одного класса, а потом получившийся список или HashMap отдать в Singleton.
Можно хранить снаружи war'ника - достаточно путь указать к пропертям.
Да любой DI фреймворк, в принципе, это умеет. Полегче будет guice. Вообще спринг с приходом аннотаций пару лет назад стал гораздо легче с точки зрения объема конфигурационных файлов.
По поводу п.3 - это так или иначе будет кастомный код, который будет разбираться с вашим конфигом. Как вариатнт - FactoryBean, который создаст нужный Singleton.