2015-10-14 4 views
4

J'essaye de paramétrer mon fichier application.yml afin que je puisse le mettre en dépôt github avec mon projet, mais sans révéler les détails de connexion à la base de données. Je veux utiliser les variables d'environnement système pour le faire. J'utilise OS X El Capitan.Spring Boot - en utilisant des variables d'environnement dans application.yml

je mets les lignes suivantes dans mon .bash_profile:

export JDBC_TODO_USER=<my-username> 
export JDBC_TODO_PASS=<my-password> 

et suivantes lignes dans mon application.yml:

spring: 
    datasource: 
    username: ${JDBC_TODO_USER} 
    password: ${JDBC_TODO_PASS} 

J'ai aussi essayé

spring: 
    datasource: 
    username: ${JDBC.TODO.USER} 
    password: ${JDBC.TODO.PASS} 

Ces deux me donnent une erreur au début de l'application: java.sql.SQLInvalidAuthorizationSpecException: Could not connect: Access denied for user '${JDBC_TODO_USER'@'<my-ip-address>' (using password: YES)

Bien sûr, quand je remplace ${JDBC_TODO_USER} avec mon nom d'utilisateur et ${JDBC_TODO_PASS} avec mon mot de passe alors tout fonctionne très bien. Il semble que Spring ne comprend pas que je me réfère à des variables d'environnement. Ai-je besoin de faire une configuration supplémentaire pour le faire fonctionner?

Répondre

0

J'ai trouvé le coupable - j'ai tout fait via Eclipse et Eclipse ne voit pas ce qu'il y a dans le fichier .bash_profile. La définition de ces variables d'environnement dans Run -> Run Configuratons ... -> Environment a résolu le problème.

3

Il est fort probable que vos variables d'environnement ne soient pas disponibles. Avez-vous essayé ce qui suit pour voir s'ils sont accessibles?

echo $JDBC_TODO_USER 
echo $JDBC_TODO_PASS 

ou

export 

Un moyen infaillible pour assurer leur disponibilité est de:

  1. vi /etc/launchd.conf
  2. sudo
  3. Ajoutez les lignes suivantes:
setenv JDBC_TODO_USER 
setenv JDBC_TODO_PASS 
  1. Enregistrez le fichier.
  2. Run export pour confirmer que vos entrées sont là

Vous pouvez également essayer des propriétés du système:

java -Djdbc.todo.user = myuser -Djdbc.todo.pass = mypass jar MyProject.jar

avec ce qui suit dans votre application.YML:

spring: 
    datasource: 
    username: ${jdbc.todo.user} 
    password: ${jdbc.todo.pass} 

Mais en fin de compte pour stocker les informations d'identification de l'utilisateur dans un environnement de production, je recommanderais une des options suivantes: http://docs.ansible.com/ansible/playbooks_vault.html https://vaultproject.io/

+0

Comme je l'ai écrit dans ma propre réponse, le problème avec Eclipse ne pas voir les variables défini dans '.bash_profile'. J'ai remarqué que quand j'ai couru 'mvn spring-boot: run' dans Terminal et l'application a démarré sans aucun problème. J'ai dû définir ces variables dans Run Configuration dans Eclipse pour que cela fonctionne. Mais merci d'indiquer d'autres façons de transmettre ces informations d'identification! –

+0

Cela fonctionne également lors de l'utilisation d'un fichier de propriétés Java. Je voudrais juste souligner que lorsque vous utilisez des variables d'environnement, vous devez indiquer clairement qu'elles existent à l'avance (par exemple, faites attention à Win env). – reim