Приложение My Spring Boot (2.1.1.RELEASE) развертывается как WAR на сервере Tomcat 8.5 в системе Debian 9.Для настройки приложения используются, в частности, следующие файлы:
- myApplication.properties (основной файл конфигурации для Spring)
- log4j2.xml
Оба под src/main/resources
.
Мой вопрос о том, как настроить Tomcat и Spring Boot таким образом, чтобы я мог иметь каталог /home/oliver/conf
, который содержит оба этих файла, чтобы переопределить значения по умолчанию, определенные в src/main/resources
(которыйзатем в WEB-INF/classes
во взорванной войне).
Ниже приведены шаги, которые я предпринял.
Сначала, и в качестве требования для проекта, над которым я работаю, я изменил базовый каталог Tomcat по умолчанию наукажите другое место, отредактировав /etc/init.d/tomcat8
:
CATALINA_HOME=/usr/share/tomcat8
CATALINA_BASE=/home/oliver
Моя папка /home/oliver/conf
, в которой хранятся конфигурации Tomcat и Spring, выглядит следующим образом:
- Catalina/
- context.xml
- web.xml
- server.xml
- ...
- myApplication.properties
- log4j2.xml
- otherAppConfFile.properties
- ...
Поскольку Spring ищетapplication.properties
по умолчанию, я использую аннотацию @ PropertySource , чтобы указать другой файл:
@SpringBootApplication
@PropertySource({classpath: myApplication.properties})
public class MyApp extends SpringBootServletInitializer {...}
Я пытался добавить -Dspring.config.location=file:/home/oliver/conf/myApplication.properties
к JAVA_OPTS определено в /etc/default/tomcat8
, и оно работает (корректно переопределяет встроенный файл), но, например, если я пытаюсь добавить file:/etc/oliver/conf/log4j2.xml
к предыдущему параметру JVM, оно не работает.
Я немного прочитал о Spring "профилях среды", но не хочу их использовать, если это возможно.
Когда я запускаю Tomcat и запускаю команду ps aux | grep tomcat
, я вижу все JAVA_OPTSпараметры определены как и ожидалось, и я также вижу следующее:
-classpath :/home/oliver/conf:/usr/share/tomcat8/bin/.... -Dcatalina.base=/home/oliver -Dcatalina.home=/usr/share/tomcat8
Я немного сбит с толку из-за того, как classcat-путь Tomcat и Spring связаны, и как я должен решить эту проблему.
Если путь к классу, который я вижу при запуске, включает в себя каталог /home/oliver/conf
, почему файлы внутри не перекрывают встроенные файлы свойств (myApplication.properties, log4j2.xml ...)?Папка видна и добавлена в classpath Spring?
РЕДАКТИРОВАТЬ:
В качестве примечания, в /home/oliver/conf
могут быть различные файлы, которые необходимо учитывать,экземпляр log4j2.xml + myApplication.properties + keystore.jks , поэтому я не уверен, что могу полностью положиться на -Dspring.config.location
и -Dlogging.config
.