Saltar al contenido

Leer variable de entorno en SpringBoot

Encontramos el arreglo a este atolladero, o por lo menos eso creemos. Si presentas inquietudes coméntalo y con placer te responderemos

Solución:

Citando la documentación:

Spring Boot le permite externalizar su configuración para que pueda trabajar con el mismo código de aplicación en diferentes entornos. Puede usar archivos de propiedades, archivos YAML, Variables de entorno y argumentos de línea de comandos para externalizar la configuración. Los valores de propiedad se pueden inyectar directamente en sus beans utilizando el @Value anotaciónaccedido a través de Spring’s Environment abstracción o vinculado a objetos estructurados a través de @ConfigurationProperties.

Entonces, dado que Spring boot le permite usar variables de entorno para la configuración, y dado que Spring boot también le permite usar @Value para leer una propiedad de la configuración, la respuesta es sí.


Esto se puede probar fácilmente, lo siguiente dará el mismo resultado:

@Component
public class TestRunner implements CommandLineRunner 
    @Value("$bar")
    private String bar;
    private final Logger logger = LoggerFactory.getLogger(getClass());
    @Override
    public void run(String... strings) throws Exception 
        logger.info("Foo from @Value: ", bar);
        logger.info("Foo from System.getenv(): ", System.getenv("bar")); // Same output as line above
    

Puedes hacerlo con la anotación @Value:

@Value("$bar")
private String myVariable;

También puede usar dos puntos para dar un valor predeterminado si no lo encuentra:

@Value("$bar:default_value")
private String myVariable;

Aquí hay tres sintaxis de “marcador de posición” que funcionan para acceder a una variable de entorno del sistema llamada MY_SECRET:

@Value("$MY_SECRET:aDefaultValue")
private String s1;

@Value("#environment.MY_SECRET")
private String s2;

@Value("$myApp.mySecretIndirect:aDefaultValue") // via application property
private String s3;

En el tercer caso, el marcador de posición hace referencia a una propiedad de la aplicación que se ha inicializado desde el entorno del sistema en un archivo de propiedades:

myApp.mySecretIndirect=$MY_SECRET:aDefaultValue

Para @Value para funcionar, debe ser utilizado dentro de un vivo @Component (o similar). Hay gochas adicionales si desea que esto funcione durante las pruebas unitarias; vea mi respuesta a ¿Por qué mi campo Spring @Autowired? null?

Aquí puedes ver las comentarios y valoraciones de los lectores

Tienes la opción de reafirmar nuestra publicación dejando un comentario o puntuándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *