¿Application.yml admite variables de entorno?

109

Intenté usar variables env en mi configuración application.yml como:

spring:
  main:
    show_banner: false

---

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

pero las variables env no se resuelven. ¿Tengo que proporcionar una notación diferente?

En Rails, por ejemplo, puede usar <% = ENV ['FOOVAR']%>

La única alternativa es ejecutar la aplicación como:

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

Respuestas:

145

Pruebe ${OPENSHIFT_DIY_PORT}(la notación habitual de marcador de posición de Spring). Consulte aquí los documentos.

Dave Syer
fuente
Esto era exactamente lo que necesitaba:app.name=MyApp app.description=${app.name} is a Spring Boot application
jurassix
2
Solo para señalar, si está usando kotlin, debe poner su referencia entre comillas y escapar del, $por ejemploroot: "\${LOGGING_LEVEL_ROOT:info}"
Edward
Chicos, ¿cómo podemos pasar el OPENSHIFT_DIY_PORT a través de unix cli al iniciar la aplicación? Sé que podemos usar -D para pasar parámetros de anulación, pero ¿eso también funciona para variables env? Ej .: nohup java -Xmx1024m -jar -Dspring.profiles.active = "lo que sea". ¿Hay alguna forma de hacer eso con env vars?
Igor Donin
@IgorDonin, ¿la concatenación de asignaciones de variables y el programa llamarían una opción para usted? Por ejemplo:$MY_ENV=value && java -jar ...
PAX
84

Incluso puede agregar un valor predeterminado, si no se proporciona la variable de entorno:

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}
Alex Efimov
fuente
5
Encontré esta sintaxis en una aplicación que heredé y no he podido encontrar los documentos de Spring que muestran esto. Es bastante obvio lo que está sucediendo, pero sería bueno poder encontrar los documentos para ello. Gracias por compartir. Ahora tengo más confianza en mi conclusión.
reverendo
¿Se utilizan valores predeterminados en la configuración UB o se indica explícitamente que es posible?
anddero