[英]How to load changed environment variable in spring boot application running in PCF without restarting application?
[英]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
然而,我之后
我得到表明占位符未被替换的异常。
我该如何解决它,即确保我可以通过环境变量在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.