2016-12-06 11 views
1

Я установил переменную окружения, выполнив командудоступа переменной среды в .conf файл для загрузки приложения весной

export test=abcd 

Я могу видеть тест = ABCD, когда я бегу printenv команду

Я развернула springboot .jar, и я передаю JAVA_OPTS из файла springboot.conf.

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

Будьте осторожны ваши цитаты. Предполагая, что вы используете «нормальную» оболочку, переменные не будут заменены одиночными кавычками.

java -Dspring.profiles.active=aws -Denv="$myvariable" -jar springboot.jar должен содержать env, доступный в JVM, независимо от того, запускаете ли вы его как услугу или нет.

Если вы не можете заставить его работать, попробуйте указать твердое кодированное значение, подобное этому java -Dspring.profiles.active=aws -Denv=foo -jar springboot.jar. Если env теперь доступно в JVM, ваша проблема связана с вашим механизмом оболочки или запуска. Убедитесь, что пользователь, который запускает команду (т. Е. Использует sudo?), Имеет набор переменных.

+0

См. Http://www.tldp.org/LDP/abs/html/quotingvar.html для того, как bash интерпретирует кавычки, он аналогичен во многих других оболочках, таких как zsh или fish – gogstad

+1

в основном я хочу достичь этого [link] http : //docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html [ссылка]. Я не хочу жестко кодировать 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