@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.
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