2016-12-06 306 views
1

我已经通过执行命令设置环境变量Access环境变量

export test=abcd 

我可以看到测试= ABCD当我运行printenv命令

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

回答

0

要小心你的报价。假设您使用“正常”shell,变量不会被单引号替换。

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?)具有变量集。

+0

见http://www.tldp.org/LDP/abs/html/quotingvar.html对于bash如何解释的报价,这是在其他许多炮弹一样的zsh或鱼 – gogstad

+1

类似基本上我想要实现这个[链接] HTTP ://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html [link]。我不想硬编码env,我希望应用程序作为服务运行。这是我的要求 – javacoder

+0

我试着用双引号,它没有工作。命令java -Dspring.profiles.active = aws -jar springboot.jar会正常工作,因为env变量将自动可用于spring application.yml。我想将它作为服务运行,所以我创建了springboot.conf,内容如下(我试过双引号,单引号等)。 'JAVA_OPTS =“ - Dspring.profiles.active = aws -Denv = $ env”'。当我们作为服务运行时,我们无法访问环境变量 – javacoder