¿Application.yml admite variables de entorno?

3 minutos de lectura

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 puedes, por ejemplo, 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

avatar de usuario
dave sier

Probar ${OPENSHIFT_DIY_PORT} (la notación habitual de marcador de posición de Spring). Ver aquí para documentos

  • Esto era exactamente lo que necesitaba: app.name=MyApp app.description=${app.name} is a Spring Boot application

    – jurassix

    24 de abril de 2018 a las 16:49


  • Solo para señalar: si está usando kotlin, debe poner su referencia entre comillas y escapar del $ p.ej root: "\${LOGGING_LEVEL_ROOT:info}"

    – Eduardo

    11 de febrero de 2019 a las 12:57


  • Chicos, ¿cómo podemos pasar 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 las variables env? Ej.: nohup java -Xmx1024m -jar -Dspring.profiles.active=”lo que sea”. ¿Hay alguna manera de hacer eso con env vars?

    – Igor Donín

    15 de febrero de 2019 a las 12:06


  • @IgorDonin, ¿la concatenación de asignaciones de variables y el programa sería una opción para usted? P.ej.: $MY_ENV=value && java -jar ...

    – PAX

    12 de mayo de 2020 a las 12:31

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

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}

  • Encontré esta sintaxis en una aplicación que heredé y no pude 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, tengo más confianza con mi conclusión ahora.

    – reverendo

    28 de noviembre de 2018 a las 0:15

  • Esta usando valores predeterminados en la configuración UB o es explícitamente posible?

    – Desbordamiento de bocadillos

    9 de febrero de 2019 a las 15:09

  • hace esta cadena de sintaxis? se puede hacer ${MY_EXPECTED_VALUE:${${MY_ENV}_my_expected_prefix:default_value}} sería bueno leer los documentos sobre esto

    – Dave Ankin

    2 de diciembre de 2020 a las 17:26


  • Descubrí que esto (y la respuesta aceptada) también funciona para application.yml de Micronaut.

    – Ritrat

    30 de julio de 2021 a las 18:47

  • La sintaxis de @DaveAnkin se puede encadenar. acabo de probar: spring.datasource.url: ${POSTGRES_URL:jdbc:postgresql://database:5432/${spring.application.name}}

    – Christian Dräger

    13 abr a las 12:41


avatar de usuario
Jorge Tovar

En resumen SI. Puede usar @Value para cargar las variables de entorno desde el aplicación.yml o aplicación.propiedades

Además, puede cargar variables y convertirlas automáticamente si necesita diferentes tipos de datos para realizar sus validaciones y lógica comercial.

server:
  address: ${OPENSHIFT_DIY_IP}
  port: ${OPENSHIFT_DIY_PORT}

Cargar información

@Value("${server.address}")
private String serverAddress;

@Value("${server.port}")
private Integer serverPort;

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad