Cosas que no sabes sobre el enlace de configuración de ConfigurationProperties de la serie básica
En el proyecto SpringBoot, se puede decir que obtener propiedades de configuración es una cuestión muy simple. Después de escribir la configuración en el archivo application.yml, podemos vincularla y obtenerla directamente a través de la anotación @Value; Además, también podemos vincular una configuración estructurada a un POJO con la ayuda de @ConfigurationPorperties y luego usarla para el proyecto. Al usarlo, me pregunto si lo ha pensado
Si lo anterior es. Ya está claro. Si está preocupado, este artículo no será particularmente útil; si tiene alguna pregunta sobre esto, se la explicaré una por una.
Este proyecto se lleva a cabo con la ayuda de SpringBoot 2.2. 1.RELEASE + maven 3.5.3 + Desarrollo IDEA
El siguiente es el pom.xml principal (el código fuente se puede obtener al final del artículo)
Supongamos que ahora personalice un módulo funcional, que contiene algunos de nuestros parámetros personalizados y admite pasar la inyección yaml a través de archivos de configuración
Primero podemos definir una clase de configuración BindConfig
Tenga en cuenta que en lo anterior anotación, prefijo = hhui.bind, en pocas palabras, se leerá el archivo de configuración, los atributos con el prefijo hhui.bind se asignan a esta clase a su vez
Los archivos de configuración correspondientes son los siguientes
Notas
Con respecto al último punto anterior, esto significa que podemos declarar una clase interna para vincular información de configuración en la clase de configuración automática automática, de la siguiente manera
¿Tendrá efecto? directamente después de modificar la clase de configuración con @ConfigurationProperties? En términos generales, hay tres formas de hacer que surta efecto.
Agregue directamente @Component, @Configuration y otras anotaciones a la clase de configuración y deje que el contenedor Spring las escanee y cargue.
Usar this Al utilizar este método, debe prestar atención a la clase de configuración en la ruta del paquete escaneado automáticamente; de lo contrario, es posible que no se pueda escanear (principalmente cuando se proporcionan servicios como paquetes jar de terceros, puede haber problemas que no se pueden escanear)
Ponlo Tratarlo como un bean ordinario e implementarlo mediante el registro del bean también es una solución opcional. El método de implementación general es el siguiente
En la clase de configuración, después de agregar esta anotación. , Se puede implementar el registro de configuración, que generalmente es común. La postura de uso es la siguiente
Los tres métodos de registro anteriores, las dos primeras ideas son usar la clase de configuración como un bean, la tercera idea de implementación es consistente con el registro activo de beans (por lo tanto, si desea implementar el registro activo de beans, puede considerarlo Lógica de implementación)
¿Qué sucederá si originalmente esperábamos recibir un parámetro de tipo int en la configuración? ¿Pero en realidad completó un parámetro que no es un número entero?
Por ejemplo, en la clase de configuración anterior, nuestro archivo de configuración real completará la edad como 18 años, veamos qué sucederá al final.
Para una demostración simple, pruébelo directamente en la clase de inicio
Después de que el parámetro es anormal, el inicio directo falla. Si los requisitos del parámetro no son tan estrictos, es decir, se permite la falla, podemos establecer ignoreInvalidFields = true
Después de ejecutar nuevamente, encontrará que el inicio es normal, el resultado es el siguiente
Preste atención a la edad anterior, porque el parámetro pasado es ilegal, por lo que es nulo.
Descripción
Combine el valor predeterminado + el método ignoreInvalidFields para admitir la configuración Disponibilidad máxima:
Ejecute la salida nuevamente como
Además de los tipos básicos, ¿pueden las configuraciones comunes anidar objetos personalizados? ¿Cómo se pueden analizar los tipos no básicos?
Definimos una nueva clase Pwd
y luego ampliamos BindConfig.
En este momento, el archivo de configuración yaml correspondiente a mainPwd se puede configurar de la siguiente manera
De También se puede ver en la introducción anterior que se admiten clases POJO personalizadas y no hay diferencia en la postura de uso.
Además, también se brindan ejemplos para el uso de Lista y Mapa.
Nuestra clase Pwd personalizada anterior utiliza principalmente el método setter para insertar atributos coincidentes; si mi configuración es una cadena json, ¿se puede inyectar en una clase POJO?
La clase Jwt correspondiente; es el siguiente
Si desea implementar el análisis de configuración anterior en este momento, puede admitirlo implementando la interfaz org.springframework.core.convert.converter.Converter y usando la anotación @ConfigurationPropertiesBinding para indique que esta es una clase de conversión de propiedad de configuración, sin agregar Esta anotación no tendrá efecto
Nota
Cuando utilice reglas de análisis de configuración personalizadas, preste atención a dos puntos
Spring proporciona algunas reglas de análisis de configuración predeterminadas. Por ejemplo,
una clase de configuración, ¿qué pasará si la clase correspondiente no tiene este atributo?
Por ejemplo, en el BindConfig anterior, no hay ningún atributo notExist, pero se agrega en el archivo de configuración.
Después de las pruebas reales, se descubrió que no hay ningún impacto. Al observar los miembros de la anotación @ConfigurationProperties, se descubrió que se puede establecer ignoreUnknownFields = false, lo que literalmente significa que ha aparecido un miembro no reconocido y no habrá ningún error. Sin embargo, en la prueba real, no tuvo efecto. /p>
Se puede decir que la verificación de parámetros es un caso más común. Por ejemplo, en la era de configuración anterior, básicamente no se permitía que este parámetro fuera un número negativo. Si es necesario verificar los parámetros, podemos usarlo. @Validated para implementar la verificación
Agregue dependencia de pom
Luego agregue @Validated a la clase de configuración y luego podrá agregar las restricciones correspondientes en los campos que deben verificarse
Si configuramos el parámetro de edad que no cumple con las condiciones anteriores
Si prueba nuevamente, encontrará el siguiente error
Durante el proceso de desarrollo de Spring, al agregar configuraciones en el archivo yaml, hay indicaciones muy amigables con la idea, y puede completar la configuración de parámetros de manera muy amigable
Entonces, ¿qué debemos hacer con nuestros parámetros personalizados para lograr este efecto?
Agregue las dependencias al principio del artículo
Después de agregar las dependencias anteriores, empaquete el paquete mvn clean y luego encontrará spring-configuration-metadata.json en META-INF.
p>
Entonces estará disponible la finalización automática
Descripción
Idea recomienda agregar el complemento Spring Assistant para admitir la inyección de configuración muy amigable p>
Este artículo presenta @ConfigurationProperties modifica la clase POJO para implementar el enlace de configuración. Puede declarar esta clase como.
Regístrese como un bean normal, o puede usar @EnableConfigurationProperties para registrarse
Al configurar los parámetros, debe prestar atención al hecho de que si los tipos de parámetros son inconsistentes, el inicio del proyecto fallará; ConfigurationProperties#ignoreInvalidFields = true para evitar este escenario
Al implementar la interfaz Converter + @ConfigurationPropertiesBinding para personalizar las reglas de conversión y análisis de parámetros, se puede lograr el análisis de parámetros de varias posturas
El análisis automático El soporte rápido de la configuración también es relativamente simple. Agregue org.springframework.boot:spring-boot-configuration-processor depende de ello. Después del empaquetado, habrá un archivo json adicional spring-configuration-metadata.json en META-INF <. /p>
Código fuente del proyecto
Una serie de publicaciones de blog
Una carta sincera no es tan buena como cualquier otra cosa. Los contenidos anteriores son opiniones puramente personales. Habilidades personales, inevitablemente hay omisiones y errores. Si encuentra errores o tiene mejores sugerencias, puede criticarlos y corregirlos sin dudarlo.
El siguiente es un blog personal gris que registra todo el blog. publicaciones en estudio y trabajo. Todos son bienvenidos a visitar