首页 > 解决方案 > 如何确保在 Apache Tomcat 中运行的 Spring Boot 应用程序中替换了环境变量占位符?

问题描述

我有一个 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}

该应用程序从 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

然而,我之后

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

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

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

标签: javaspring-boottomcat9

解决方案


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=etc. 添加到上述行,或setenv.sh使用这些行创建一个文件(与文件在同一目录中catalina.sh)。

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


推荐阅读