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’sEnvironment
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.