Я борюсь за решение для доступа к файлам конфигурации из разных мест в зависимости от разных условий (dev
, prod
).Загрузка свойств из разных мест
Вот приблизительная схема моего проекта.
│ pom.xml
└───src
└───main
├───java
│ ConfigurationLoader.java
├───resources
│ conf1.properties
└───webapp
│ web.xml
└───WEB-INF
ConfigurationLoader
является самоописанным классом и должен быть каким-то обычный синглтоном, статический доступен по всему приложению.
В dev
среде он должен загрузить conf1.properties
от корня пути к классам, но в prod
окр он должен найти их в корневой папке контейнера (напр. %TOMCAT_HOME%\bin
).
Как правильно использовать ConfigurationLoader
для загрузки таких выборочных свойств?
Благодаря
UPD:
Я больше заинтересован в ConfigurationLoader
реализации и файлы свойств местах. Проблема заключается в том, как ConfigurationLoader
найти эти файлы. Что-то вроде:
String path = "/conf1.properties";
File confFile;
switch (environment) {
case "dev": //classpath
URI location = ConfigurationLoader.class.getResource(path).toURI();
confFile = new File(location);
break;
case "prod": //root (?)
confFile = new File(path);
break;
}
Properties p = new Properties(confFile);
Здесь приходит несколько вопросов:
Как я должен передать переменные окружения в код из Maven (определенный в профилях или любой другой)? Я не хочу фильтровать java-классы и, возможно, предварительно загружать другой файл свойства только с записью среды. Кроме того, я не думаю, что смогу изменить системные свойства (
-Denv=whatever
) на производственной платформе.Что делать, если файл свойства должны содержать пути для некоторых ресурсов, которые будут доступны для других компонентов системы (напр.
applicationContext.xml
для пружины, которая также должна быть на любом пути к классам дляdev
или в папке этогоbin
TOMCAT в)? Как должны выглядеть эти пути и как они будут нуждаться в их решении в моем коде, избегая дублирования кода этого разделаConfigurationLoader
?
Есть ли шанс разрешить его больше в maven и меньше в коде или какие другие подходы существуют?
Вы можете не определить вид 2 сред и проверить с, если заявлением, что Evironment вы используете в данный момент? это может быть в вашем файле настроек или что-то в этом роде. – Reshad