Spring boot – Inyectar propiedades con @Value

@Value de Spring boot

La configuración es una de las partes más importantes de cualquier aplicación, pues permite que se pueda configurar según el entorno de ejecución o el ambiente en el que se desplegará, por suerte Spring boot cuenta con el archivo application.properties, en el cual podemos guardar todos aquellos valores que pueden cambiar con el tiempo, lo que evita la mala práctica de crear código hardcode o código duro.

Pero la pregunta es, como podemos acceder a estar propiedades desde una aplicación, pues bien, gracias a la inyección de dependencias que caracteriza a Spring Boot, es posible inyectar cualquier propiedad mediante la anotación @Value, tal como se puede ver a c continuación:

@Configuration
public class ConverterConfig {
	@Value("${path.to.prop.name }")
	private String myProp;
}

Y el archive application.properties quedaría de la siguiente forma:

path.to.prop.name=my value

Esto aplica exactamente igual cuando con un archivo application.yml:

path:
 to:
  prop:
   name:my value

Mediante esta técnica ya no necesitarás poner código duro nunca más.

¿Quieres aprender a crear un API REST completa con Spring boot? te invito a curso de Mastering API REST con Spring Boot.

4 thoughts to “Spring boot – Inyectar propiedades con @Value”

  1. Oscar como estas, vos sabes que no consigo hacerlo funcionar lo de la inyeccion.
    Me esta faltando algo

    @Configuration
    public class MyProperties
    {
    @Value(“${spring.datasource.url}”)
    private String url;

    public String getUrl()
    {
    return url;
    }

    public void setUrl(String url)
    {
    this.url = url;
    }

    }

    1. Hola,

      Creo que el problema viene de que la notación correcta para inyectar valores con la anotación @Value es @Component (para tratar la clase de configuración como un Bean que inyectar en otras clases).

      Substituya @Configuration por @Component.

      Después puede inyectar su clase en otra clase java en donde quiera utilizarla añadiendo la variable privada:

      @Autowired
      private MyProperties env;

      Nota: He utilizado la inyección en la variable por simplificación pero es una práctica no recomendada puesto que complica la creación de test unitarios entre otros aspectos, para más info -> https://www.javacodegeeks.com/2019/02/field-setter-constructor-injection.html

Deja un comentario

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