2

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

export test=abcd

printenv运行命令时可以看到 test=abcd

我已经部署了一个 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"
4

2 回答 2

1

小心你的报价。假设您使用“普通”外壳,变量不会被单引号替换。

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?)设置了变量。

于 2016-12-06T08:22:49.190 回答
0

我遇到了同样的问题,我的 .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

于 2018-07-13T01:33:09.617 回答