↓Ir al contenido

Spring Boot Configuración de Propiedades

·3 mins

@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