2016-12-06 3 views
1

j'ai mis la variable d'environnement en exécutant la commandevariable d'environnement d'accès dans le fichier .conf pour l'application de démarrage de printemps

export test=abcd 

Je peux voir test = abcd quand je lance printenv commande

J'ai déployé un springboot L'application .jar et je passe le JAVA_OPTS du fichier springboot.conf. J'ai commencé l'application par service springboot start. Lorsque je vérifie le processus, la variable d'environnement n'a pas la valeur de la variable d'environnement $ test.

/usr/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -Dspring.profiles.active=aaa -Denv=. 

Comment puis-je accéder à la variable d'environnement dans le fichier conf? J'ai lu quelque part que les variables d'environnement seront supprimées lors de l'exécution en tant que service. Fondamentalement, je veux courir comme service springboot start qui exécute la commande interne ci-dessous

java -Dspring.profiles.active=aws -Denv=${whatever is set for env environment variable} -jar springboot.jar

J'ai essayé les configurations ci-dessous, mais rien n'a fonctionné

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" 

Répondre

0

Faites attention à vos citations. En supposant que vous utilisez un shell "normal", les variables ne seront pas remplacées par des guillemets simples.

java -Dspring.profiles.active=aws -Denv="$myvariable" -jar springboot.jar doit conduire à env étant disponible dans la machine virtuelle Java, peu importe si vous l'exécutez en tant que service ou non.

Si vous ne pouvez pas le faire fonctionner, essayer de spécifier une valeur codée en dur comme celui-ci java -Dspring.profiles.active=aws -Denv=foo -jar springboot.jar. Si env est maintenant disponible dans la JVM, votre problème concerne votre shell ou votre mécanisme d'exécution. Vérifiez que l'utilisateur qui exécute la commande (c'est-à-dire utilisez-vous sudo?) Possède l'ensemble de variables.

+0

Voir http://www.tldp.org/LDP/abs/html/quotingvar.html pour savoir comment bash interprète les citations, il est similaire dans de nombreux autres shells comme zsh ou poisson – gogstad

+1

fondamentalement, je veux y parvenir [link] http : //docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html [lien]. Je ne veux pas coder en dur l'env et je veux que l'application fonctionne comme un service. C'est mon exigence – javacoder

+0

J'ai essayé d'utiliser des guillemets, cela n'a pas fonctionné. La commande java -Dspring.profiles.active = aws jar springboot.jar fonctionnera bien que la variable d'env sera automatiquement disponible pour application.yml printemps. Je veux l'exécuter en tant que service, j'ai donc créé springboot.conf et le contenu est comme indiqué ci-dessous (j'ai essayé les guillemets doubles, les guillemets simples, etc.). 'JAVA_OPTS =" - Dspring.profiles.active = aws -Denv = $ env "'. Lorsque nous fonctionnons en tant que service, nous ne pouvons pas accéder aux variables d'environnement – javacoder