Spring Boot Configuración de Propiedades

@ConfigurationProperties es una característica de Spring Boot que permite vincular configuraciones externas a una clase Java.

Mapea nombres de propiedades a campos de una clase Java, facilitando la gestión de configuraciones externas.

Por lo tanto, podemos utilizar esta funcionalidad de Spring si queremos establecer las propiedades en una clase Java.

Dependencias

Necesitará al menos esta dependencia.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

Cómo utilizar las propiedades de configuración con una clase Java Pojo

Las propiedades pueden ser especificadas desde tus archivos application.properties.

La clase anotada puede entonces ser usada para acceder a las propiedades en el código de tu aplicación. Esto ayuda a separar la configuración de la implementación, haciéndola más fácil de gestionar y mantener.

He aquí un ejemplo sencillo de cómo utilizar @ConfigurationProperties en una aplicación Spring Boot:

Si tenemos este fichero de propiedades:

app.name=The name of this app
app.description=This description of this app

Podemos establecer estas propiedades en una clase Java de forma automática. Para ello, hay que anotar la clase Java con estas dos anotaciones:

  • @ConfigurationProperties
  • @Component

El prefijo en ConfigurationProperties tiene que ser igual al prefijo de la propiedad.

@ConfigurationProperties(prefix = "app")
@Component
public class AppInfo {

    private String name;
    private String description;

    // set and get.. 
    
    @Override
    public String toString() {
        return "AppInfo{" +
                "name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }

}

Observe cómo el prefijo de la propiedad se une con la anotación y cada propiedad con el atributo class.

Spring Boot Configuration Properties

Cómo usar las propiedades de configuración con un Bean de Spring

Esta forma es similar a la anterior que aprendimos veamos como se utiliza.

Por ejemplo, para estas propiedades:

app.mail.hostname=host@mail.com
app.mail.port=9000
app.mail.from=mailer@mail.com

Vamos a definir la clase AppConfig y la anotamos con @Configuration. La clase AppConfig es una clase de @Configuration que define un componente con la anotación @Bean.

El método mailData() devuelve una instancia de MailData y se anota con @ConfigurationProperties pasando como parámetro el prefijo “app.mail” para especificar que sus atributos (los de la clase MailData) deben ser llenados con las propiedades que tienen el prefijo “app.mail”.

@Configuration
public class AppConfig {

    @Bean
    @ConfigurationProperties(prefix = "app.mail")
    public MailData mailData() {
        MailData mailData = new MailData();
        return mailData;
    }

}

Ejecución de ambos ejemplos

A continuación, puede utilizar el bean o el componente en otras partes de su aplicación a través de la inyección de dependencias, por ejemplo:

@SpringBootApplication
public class SpringBootConfigurationPropertiesApplication {

    @Autowired
    AppInfo appInfo;

    @Autowired
    MailData mailData;

    public static void main(String[] args) {
        SpringApplication.run(SpringBootConfigurationPropertiesApplication.class, args);
    }

    @PostConstruct
    public void post() {
        System.out.println(appInfo);
        System.out.println(mailData);
    }
}

El resultado de esto es:

AppInfo{name='The name of this app', description='This description of this app'}
MailData{hostName='host@mail.com', port=9000, from='mailer@mail.com'}

Conclusión:

@ConfigurationProperties es una anotación de primavera utilizada para asignar propiedades de configuración externas a campos de una clase Java, facilitando la obtención de valores de propiedad en sus servicios.

Este código está en GitHub

Hi! If you find my posts helpful, please support me by inviting me for a coffee :)

Ver también