如何确保环境变量占位符在 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
然而,在我
之后
- 使用上面的脚本开始Tomcat,
- 从 IntelliJ Idea 部署 Spring 引导应用程序,并且
- 确保执行了使用这些值的代码,
我收到异常,表明占位符尚未被替换。
我该如何解决,我。 e.确保我可以通过环境变量在 application.yaml
中指定一些信息(如用户名和密码)(这样我就不会在 application.yaml
中包含实际凭据)?
无法将 JVM 参数从 IDE 传递到远程计算机中的进程 运行。当进程在远程机器上启动时,Spring 引导参数将从 JVM 参数加载。很抱歉,这行不通。
我建议的替代解决方案是,使用 spring 配置服务器为远程调试配置创建一个单独的配置文件(就像我们为开发、QA 环境等所做的那样)。当您尝试调试应用程序时,请使用 jenkins 作业重新启动远程应用程序(我假设您没有远程访问应用程序 运行 所在的框)通过在 jenkins 作业中传递配置文件名称您想要的值将被拾取。如果您需要更多详细信息,请告诉我。
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
记录在 Apache Tomcat 的 RUNNING.txt
文件中。
我有一个 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
然而,在我
之后- 使用上面的脚本开始Tomcat,
- 从 IntelliJ Idea 部署 Spring 引导应用程序,并且
- 确保执行了使用这些值的代码,
我收到异常,表明占位符尚未被替换。
我该如何解决,我。 e.确保我可以通过环境变量在 application.yaml
中指定一些信息(如用户名和密码)(这样我就不会在 application.yaml
中包含实际凭据)?
无法将 JVM 参数从 IDE 传递到远程计算机中的进程 运行。当进程在远程机器上启动时,Spring 引导参数将从 JVM 参数加载。很抱歉,这行不通。
我建议的替代解决方案是,使用 spring 配置服务器为远程调试配置创建一个单独的配置文件(就像我们为开发、QA 环境等所做的那样)。当您尝试调试应用程序时,请使用 jenkins 作业重新启动远程应用程序(我假设您没有远程访问应用程序 运行 所在的框)通过在 jenkins 作业中传递配置文件名称您想要的值将被拾取。如果您需要更多详细信息,请告诉我。
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
记录在 Apache Tomcat 的 RUNNING.txt
文件中。