2016-12-06 304 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