Application.yml prend-il en charge les variables d'environnement?

110

J'ai essayé d'utiliser des variables env dans ma configuration application.yml comme:

spring:
  main:
    show_banner: false

---

spring:
  profiles: production
server:
  address: $OPENSHIFT_DIY_IP
  port: $OPENSHIFT_DIY_PORT

mais les variables env ne sont pas résolues. Dois-je fournir une notation différente?

Dans Rails, vous pouvez par exemple utiliser <% = ENV ['FOOVAR']%>

La seule alternative est d'exécuter l'application comme:

java -jar my.jar --server.address=$OPENSHIFT_DIY_IP --server.port=$OPENSHIFT_DIY_PORT
Marcel Overdijk
la source

Réponses:

146

Essayez ${OPENSHIFT_DIY_PORT}(la notation habituelle de l'espace réservé Spring). Voir ici pour les documents.

Dave Syer
la source
C'était exactement ce dont j'avais besoin:app.name=MyApp app.description=${app.name} is a Spring Boot application
jurassix
2
Juste pour souligner - si vous utilisez kotlin, vous devez mettre votre référence entre guillemets et échapper $par exempleroot: "\${LOGGING_LEVEL_ROOT:info}"
Edward
Les gars, comment pouvons-nous passer le OPENSHIFT_DIY_PORT via unix cli lors du démarrage de l'application? Je sais que nous pouvons utiliser -D pour passer des paramètres de remplacement, mais cela fonctionne-t-il également pour les variables env? Ex .: nohup java -Xmx1024m -jar -Dspring.profiles.active = "peu importe". Existe-t-il un moyen de faire cela avec env vars?
Igor Donin
@IgorDonin, la concaténation des affectations de variables et du programme appellerait-elle une option pour vous? Par exemple:$MY_ENV=value && java -jar ...
PAX
84

Vous pouvez même ajouter une valeur par défaut, si la variable d'environnement n'est pas fournie:

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}
Alex Efimov
la source
5
J'ai trouvé cette syntaxe dans une application dont j'ai hérité et je n'ai pas pu trouver les documents Spring qui le montrent. Ce qui se passe est assez évident, mais être en mesure de trouver la documentation pour cela serait bien. Merci pour le partage - je suis plus confiant avec ma conclusion maintenant.
révérend
Utilise des valeurs par défaut dans la configuration UB ou est-ce explicitement indiqué possible?
anddero