Я пытаюсь реализовать систему резервирования для своих свойств для уровня.
Я знаю, что более продвинутые фреймворки, такие как Spring, имеют встроенную поддержку для этого, но я использую более минимальный фреймворк Spark Java.
Скажем, у меня есть следующая структура -
src/
main/
resources/
properties/
dev/
|- application.properties
|- ValidationMessages.properties
|- log4j.properties
prod/
|- application.properties
|- ValidationMessages.properties
|- log4j.properties
test/
|- application.properties
|- ValidationMessages.properties
|- log4j.properties
application.properties
ValidationMessages.properties
log4j.properties
Я бы хотел, чтобы свойства были получены следующим образом. Предположим, у меня есть системная конфигурация APP.TIER
, которая позволяет мне знать во время выполнения, каков текущий уровень (test
, dev
, prod
и т. Д.) *
- Любой «общий» файл верхнего уровня (например,
properties/application.properties
) должен применяться ко всем уровням
- Любые специфичные для уровня свойства в (например,
properties/${APP.TIER}/application.properties
) должны переопределять общие значения
По крайней мере, со свойствами приложения я могу загрузить их программно в начале моего main()
метода и сделать их доступными для всего приложения ( пример ). Я также могу контролировать порядок их загрузки, поэтому я могу вручную применить вышеупомянутую резервную логику.
Однако для сторонних плагинов (например, ValidationMessages.properties
используется Hibernate или log4j.properties
используется log4j) я не могу контролировать, как загружаются свойства.
Существует ли универсальная структура, поддерживающая этот тип поиска свойств? Я знаю, что maven поддерживает профили и фильтрацию, но это означает, что мне придется создавать отдельный JAR-файл для каждого уровня, что не кажется хорошей практикой.