如何确保在 Apache Tomcat 中运行的 Spring Boot 应用程序中替换环境变量占位符?

DP_*_*DP_ 5 java spring-boot tomcat9

我有一个 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}
Run Code Online (Sandbox Code Playgroud)

该应用程序从 IntelliJ Idea 中部署到 Tomcat,因此我可以对其进行调试。

我使用以下命令启动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
Run Code Online (Sandbox Code Playgroud)

然而,我之后

  1. 使用上面的脚本启动Tomcat,
  2. 从 IntelliJ Idea 部署 Spring Boot 应用程序,以及
  3. 确保执行使用这些值的代码,

我得到的异常表明占位符没有被替换。

我该如何修复它,即确保我可以application.yaml通过环境变量指定一些信息(如用户名和密码)(这样我就不会在 中包含实际凭据application.yaml)?

Kon*_*nko 4

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
Run Code Online (Sandbox Code Playgroud)

将等添加export MAIL_HOSTNAME=到上述行,或使用setenv.sh这些行创建一个文件(与文件位于同一目录中catalina.sh)。

使用setenv.sh记录在RUNNING.txtApache Tomcat 文件中。