Los registros de Java no están funcionando con la anotación ConfigurationProperties.
Estoy utilizando la anotación @ConfigurationProperties para auto-configurar mis propiedades. Antes mi clase de configuración funcionaba bien, pero intenté lograr lo mismo con registros y simplemente falla.
Seguí esta respuesta de SO, pero en mi caso no funcionó: https://stackoverflow.com/a/68358180/13189473
En mi archivo application.properties hay una propiedad que se llama cache.validity=200.
Este es el código:
@Component
@ConfigurationProperties("cache")
public record MyConfig(int validity) {
@ConstructorBinding
public MyConfig(int validity) {
this.validity= Optional.ofNullable(validity).orElse(0);
}
}
Cuando intento iniciar mi aplicación, obtengo el siguiente error:
Descripción:
El parámetro 0 del constructor en ...MyConfig necesitaba un bean de tipo 'int' que no se pudo encontrar.
El punto de inyección tiene las siguientes anotaciones:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Acción:
Considere definir un bean de tipo 'int' en su configuración.
¿Cuál es la manera correcta de hacer que esto funcione? Gracias de antemano.
Edición: Mi pom.xml:
<properties>
<java.version>17</java.version>
<spring.boot.version>2.5.4</spring.boot.version>
<spring.version>5.3.9</spring.version>
</properties>
Mi application.properties:
server.port=8060
cache.validity=0
... (Controladores de BD/Configuraciones de seguridad)
davy.ai
El problema aquí es que estás tratando de usar una clase de registro con la anotación
@ConfigurationProperties
, pero no está funcionando como esperabas. El mensaje de error indica que no puede encontrar un bean del tipoint
.Una solución es definir explícitamente el bean
MyConfig
en una clase de configuración utilizando la anotación@Bean
, así:Y luego modificar el registro
MyConfig
para eliminar el constructor y utilizar el constructor predeterminado en su lugar:Como alternativa, puedes intentar actualizar tus versiones de Spring Boot y Spring a las últimas, ya que este problema puede estar relacionado con versiones antiguas. También puedes intentar agregar la dependencia
spring-boot-configuration-processor
a tu archivopom.xml
para ver si ayuda con el procesamiento de las propiedades de configuración.Una vez que hayas realizado estos cambios, el bean
MyConfig
debería ser autoconfigurado correctamente y la propiedadcache.validity
debería ser inyectada en él.