Как использовать внешние файлы конфигурации с Spring boot, развернутым в Tomcat 8.5 - PullRequest
0 голосов
/ 19 декабря 2018

Приложение 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.

1 Ответ

0 голосов
/ 20 декабря 2018

Насколько я понимаю из вашего вопроса, вы пытаетесь сделать что-то подобное.

-Dspring.config.location=file:/etc/oliver/conf/log4j2.xml

Я думаю, свойство spring.config.location должно указывать расположение файла свойств для конфигурации ине log4j2.xml.Вы можете установить местоположение файла журнала в myApplication.properties, установив значение для logging.config, например

logging.config=file:/etc/oliver/conf/log4j2.xml

Или же вы можете попробовать

-Dlogging.config=file:/etc/oliver/conf/log4j2.xml

UPDATE

Это то, что я делаю в своих производственных системах.Создайте файл setenv.sh и введите команду ниже.

export JAVA_OPTS="$JAVA_OPTS -Djavax.net.ssl.trustStore=/path/to/keystore/keystore.jks -Djavax.net.ssl.trustStorePassword=changeit -Dspring.profiles.active=qa -Dspring.config.location=/path/to/config/ -Dfws_log=/path/to/logfile/location -Xms512m -Xmx1024m -Dsecret.key=somesecretkey"

Вы можете добавить любое количество сопоставлений значений ключей в этот файл, и все они будут загружены при запуске вашего кота.

...