访问 .conf 文件中的 Spring 启动应用程序的环境变量



>我通过执行命令设置了环境变量

export test=abcd

当我运行命令时,我可以看到 test=abcdprintenv

我已经部署了一个 springboot.jar 应用程序,并且正在传递 springboot.conf 文件中的JAVA_OPTS。

JAVA_OPTS='-Dspring.profiles.active=aaa -Denv=$test'

我通过service springboot start启动了该应用程序。当我检查进程时,env 变量没有$test环境变量的值。

/usr/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dspring.profiles.active=aaa -Denv=.

如何访问 conf 文件中的环境变量?我在某处读到,当作为服务运行时,环境变量将被剥离。基本上我想以内部执行以下命令的service springboot start运行

java -Dspring.profiles.active=aws -Denv=${whatever is set for env environment variable} -jar springboot.jar

我已经尝试了以下配置,但没有任何效果

JAVA_OPTS='-Dspring.profiles.active=aaa -Denv='$test
JAVA_OPTS='-Dspring.profiles.active=aaa -Denv='${test}
JAVA_OPTS='-Dspring.profiles.active=aaa -Denv=${test}'
JAVA_OPTS="-Dspring.profiles.active=aaa -Denv=$test"

小心你的引号。假设您使用"普通"外壳,变量将不会在单引号中替换。

java -Dspring.profiles.active=aws -Denv="$myvariable" -jar springboot.jar应该导致env在 JVM 中可用,无论您是否将其作为服务运行。

如果无法使其正常工作,请尝试指定如下所示的硬编码值java -Dspring.profiles.active=aws -Denv=foo -jar springboot.jar。如果env现在在 JVM 中可用,那么您的问题出在 shell 或运行机制上。验证运行命令的用户(即你是否使用 sudo?)设置了变量。

我遇到了同样的问题,我的 .conf 引用了 .bashrc 中的环境变量。

我发现的是: 问题是服务剥离了所有环境变量,但 TERM、PATH 和 LANG 除外,这是一件好事。如果您直接执行脚本,则不会删除环境变量,因此一切正常。

https://unix.stackexchange.com/questions/44370/how-to-make-unix-service-see-environment-variables

一种解决方案是将您的应用程序安装为 systemd 服务:

https://docs.spring.io/spring-boot/docs/1.3.x-SNAPSHOT/reference/html/deployment-install.html

或者另一种方法是使用 docker,您可以在 docker 文件中指定额外的配置,例如加载包含环境变量的文件。

由于那些在我的情况下不可用的解决方案,我最终在 .conf 文件中具有值,例如:-Denv=prod

相关内容

  • 没有找到相关文章

最新更新