>我通过执行命令设置了环境变量
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