繁体   English   中英

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

[英]How to make sure that environment variable placeholders are substituted in a Spring Boot application running in Apache Tomcat?

我有一个 Spring 引导应用程序,它在 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 引导应用程序,以及
  3. 确保执行使用这些值的代码,

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

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

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的 RUNNING.txt 文件中。

无法将 JVM arguments 从 IDE 传递给在远程计算机中运行的进程。 当进程在远程机器中启动时,Spring 引导参数将从 JVM 参数加载。 我很抱歉地说它行不通。

我建议的另一种解决方案是,使用 spring 配置服务器为远程调试配置创建单独的配置文件(就像我们将用于开发、QA 环境等一样)。 当您尝试调试应用程序时,请通过在 jenkins 作业中传递配置文件名称来使用 jenkins 作业(我假设您没有远程访问应用程序运行的框)重新启动远程应用程序,以便您的值通缉会被接走。 如果您需要更多详细信息,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM