Как убедиться, что заполнители переменных среды заменены в приложении Spring Boot, работающем в Apache Tomcat?

У меня есть приложение Spring Boot, которое работает на сервере Apache Tomcat. В application.yaml у меня есть, среди прочего, следующие записи:

mail:
  pop3Host: ${MAIL_HOSTNAME}
  inboxFolder: ${MAIL_INBOX}
  hostName: ${MAIL_HOSTNAME}
  port: ${MAIL_PORT}
  userName: ${MAIL_USERNAME}
  password: ${MAIL_PASSWORD}

Приложение развертывается на Tomcat из IntelliJ Idea, поэтому я могу его отлаживать.

Я запускаю Tomcat с помощью следующей команды:

export JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8090,server=y,suspend=n"
export JAVA_OPTS=" -DMAIL_HOSTNAME='smtp.provider.com' -DMAIL_INBOX='MAIL_INBOX' -DMAIL_PORT='587' -DMAIL_USERNAME='username' -DMAIL_PASSWORD='XXXXXXXX'"
export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8090,server=y,suspend=n"
./catalina.sh jpda start

Однако после того, как я

  1. запустите Tomcat, используя приведенный выше скрипт,
  2. разверните приложение Spring Boot из IntelliJ Idea и
  3. убедитесь, что код, в котором используются эти значения, выполняется,

Я получаю исключение, указывающее, что заполнители не были заменены.

Как исправить, т. е. убедиться, что я могу указать некоторую информацию (например, имя пользователя и пароль) в application.yaml через переменные среды (чтобы я не включал фактические учетные данные в application.yaml)?


person Mentiflectax    schedule 06.07.2020    source источник
comment
В Intellij: Выполнить -> Выполнить.... -> Редактировать конфигурации...: есть поле для переменных среды. Вы можете добавить туда пары ключ-значение (ключ: MAIL_HOSTNAME значение: smtp.provider.com). Если вы не работаете с Intellij, добавление export MAIL_HOSTNAME="smtp.provider.com" в сценарий может сработать.   -  person Albert Hendriks    schedule 08.07.2020
comment
@AlbertHendriks Я использую Tomcat, удаленную ( imgur.com/FqZIt01) конфигурацию и не могу найти там панель переменных среды .   -  person Mentiflectax    schedule 08.07.2020


Ответы (2)


export JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8090,server=y,suspend=n"
export JAVA_OPTS=" -DMAIL_HOSTNAME='smtp.provider.com' -DMAIL_INBOX='MAIL_INBOX' -DMAIL_PORT='587' -DMAIL_USERNAME='username' -DMAIL_PASSWORD='XXXXXXXX'"
export CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8090,server=y,suspend=n"
./catalina.sh jpda start

Добавьте export MAIL_HOSTNAME= и т. д. к вышеуказанным строкам или создайте файл setenv.sh с такими строками (в том же каталоге, что и файл catalina.sh).

Использование setenv.sh задокументировано в файле RUNNING.txt Apache Tomcat.

person Konstantin Kolinko    schedule 10.07.2020

Невозможно передать аргументы JVM процессу, работающему на удаленном компьютере, из IDE. Параметры Spring Boot будут загружены из параметров JVM при запуске процесса на удаленном компьютере. Мне жаль говорить, что это не сработает.

Альтернативное решение, которое я предлагаю, заключается в использовании сервера конфигурации spring для создания отдельного профиля для конфигурации удаленной отладки (как у нас будет для сред Dev, QA и т. д.). Когда вы пытаетесь отладить приложение, перезапустите удаленное приложение, используя задание jenkins (я предполагаю, что у вас нет удаленного доступа к ящику, в котором запущено приложение), передав имя профиля в задании jenkins, чтобы значения, которые вы разыскиваемый будет взят. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

person Bangarraju Vadapalli    schedule 08.07.2020