Cosas que no sabes sobre el enlace ConfigurationProperties en la serie básica
En un proyecto SpringBoot, obtener propiedades de configuración es una tarea muy sencilla. Después de escribir la configuración en el archivo application.yml, podemos vincular y obtener la configuración directamente a través de la anotación @Value. Además, también podemos usar @ConfigurationPorperties para vincular la configuración estructurada a POJO para uso del proyecto. No sé si alguna vez pensé en esto al usarlo
Si ya está familiarizado con todo lo anterior, este artículo no le será particularmente útil, si tiene alguna pregunta, le responderemos; uno por uno en una sección
Este proyecto utiliza el marco SpringBoot 2.2.1.1. SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA para desarrollo
El siguiente es el pom.xml principal (el código fuente está disponible al final del artículo)
Supongamos que ahora queremos personalizar un módulo funcional que contenga algunos de nuestros parámetros personalizados y admita la inyección de archivos de configuración yaml
Primero, podemos personalizar un módulo funcional que contenga algunos de nuestros parámetros personalizados. p>
Primero, podemos definir una clase de configuración BindConfig
Tenga en cuenta que en el comentario anterior, prefijo = hhui.bind, esto solo significa que leerá las propiedades del archivo de configuración. con el prefijo hhui.bind y asígnelos a la clase. vincularlos y asignarlos a la clase por turno
El archivo de configuración correspondiente se ve así
Nota
Todo lo que necesitamos hacer es definir una clase de configuración, luego Podemos definir una clase de configuración para leer las propiedades en el archivo de configuración y asignarlas a la clase. strong> Nota
Con respecto al último punto anterior, también sugiere que podemos declarar una clase interna en la clase AutoConfiguration para vincular información de configuración, como se muestra a continuación
Cuando usamos @ConfigurationProperties Una vez calificada la clase de configuración, ¿entrará en vigor directamente? Después de usar @ConfigurationProperties para modificar la clase de configuración, ¿entrará en vigor directamente? En términos generales, hay tres formas de hacer que surta efecto.
Agregue las anotaciones @Component y @Configuration directamente a la clase de configuración y luego deje que el contenedor Spring las escanee y las cargue.
Usar este método Debe prestar atención a si la clase de configuración se encuentra en la ruta de los paquetes escaneados automáticamente; de lo contrario, es posible que no se analice (principalmente cuando sirve como un jar de terceros).
Tratarlo como un bean normal e implementarlo con la ayuda del registro de Bean también es una opción. El método de implementación general es el siguiente
Después de agregar esta anotación a la clase de configuración, puede implementar la configuración Registro, su situación general común es la siguiente
Los tres métodos de registro anteriores son los siguientes
Los dos primeros métodos se basan en la idea de utilizar el clase de configuración como un Bean.
Los dos primeros métodos El primer método se basa en la idea de utilizar la clase de configuración como un bean, mientras que el tercer método se basa en la idea de registrarse activamente. el bean (por lo que si desea registrar activamente el bean, puede considerar su lógica de implementación)
Si hay una configuración en la que queremos recibir un parámetro int, pero terminamos completando un archivo sin forma parámetro, ¿qué pasa?
Por ejemplo, en la clase de configuración anterior, nuestro archivo de configuración real estableció la edad en 18 años, así que veamos qué termina sucediendo.
Para una demostración simple, pruebe directamente en el clase de inicio
Después de que ocurre una excepción de parámetro, el inicio fallará, o si los requisitos de los parámetros no son tan estrictos, es decir, se permiten fallas, podemos establecer ignoreInvalidFields = true
Después de ejecutar nuevamente, encontraremos que el inicio es normal y el resultado es el siguiente
Tenga en cuenta que cuando ve la edad anterior, está vacía debido a que se pasaron parámetros ilegales
Explicación
Combine esto con el método predeterminado + ignoreInvalidFields para iniciar la clase. método ignoreInvalidFields para admitir la máxima usabilidad de la configuración:
Ejecute la salida nuevamente, como se muestra a continuación
Además de los tipos básicos, ¿se pueden anidar las configuraciones ordinarias en objetos personalizados y cómo resolverlas? ¿El tipo no básico?
Definamos una nueva clase Pwd
y luego extendamos BindConfig
En este momento, el archivo de configuración yaml de mainPwd se puede configurar de la siguiente manera
Como se puede ver en la introducción anterior, admitimos clases POJO personalizadas y no hay diferencia en las posturas de uso.
Además, también admitimos el uso de listas y mapas.
La clase Pwd personalizada mencionada anteriormente utiliza principalmente el método setter para insertar atributos coincidentes; si mi configuración es una cadena json, ¿puedo inyectarla en la clase POJO?
Corresponding The La clase Jwt es la siguiente
En este punto, si desea lograr la configuración anterior, puede hacerlo implementando la interfaz org.spring.parsing.Converter y especificándola como una cadena json. p>
Notas
Hay dos puntos a tener en cuenta al utilizar reglas de análisis de configuración personalizadas
Spring proporciona algunas reglas de análisis de configuración predeterminadas, como
¿Qué sucede si una clase de configuración no tiene este atributo en la clase correspondiente?
Por ejemplo, para el BindConfig anterior, no había ningún atributo notExist, pero el atributo se agregó en el archivo de configuración.
Después de las pruebas, descubrí que no tuvo ningún impacto. Y al mirar Para miembros en la anotación @ConfigurationProperties, descubrí que puedes configurar ignoreUnknownFields=false, lo que literalmente significa que si hay miembros no reconocidos, no causará errores menores, pero no tuvo efecto en la prueba real. /p>
Verificación de parámetros Se puede decir que es una situación relativamente común. Por ejemplo, en la configuración anterior, básicamente no se permite que la edad sea un número negativo. Si es necesario verificar los parámetros, podemos usar @Validated. para lograr esto.
Si necesitamos verificar un determinado parámetro, podemos usar @Validated para lograrlo
Agregar una dependencia pom
Luego agregue @Validated en la clase de configuración y luego podrá agregar el campos que deben verificarse Agregue las restricciones correspondientes
Si configuramos el parámetro de edad en un valor que no cumple con las condiciones anteriores
Pruebe nuevamente, encontrará el siguiente error
Generalmente en el desarrollo de Spring Durante el proceso, al agregar configuración al archivo yaml, habrá indicaciones muy amigables para completar la configuración de parámetros
Entonces, ¿cómo deberíamos usar parámetros personalizados para lograr este efecto?
Agregue 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.
Luego aparecerá la función de autocompletar
Descripción
Agregar parámetros personalizados en una configuración personalizada es una buena idea, pero no una buena idea. strong> Descripción
La idea recomienda agregar el complemento Spring Assistant, que admite una inyección de configuración muy amigable.
Este artículo presentará cómo @ConfigurationProperties modifica la clase POJO para habilitar el enlace de configuración. puede La clase POJO se declara como un bean normal para registrar la clase, o la clase se puede registrar con la ayuda de @EnableConfigurationProperties
Al configurar parámetros, debe prestar atención a la inconsistencia de los tipos de parámetros que hará que el proyecto falle; puede configurar ConfigurationProperties# ignoreInvalidFields = true para evitar esta situación
Al implementar la interfaz Converter + @ConfigurationPropertiesBinding para personalizar el análisis de parámetros y las reglas de conversión, puede realizar el análisis de parámetros para cada uno. postura
Configuración automática Lo mismo ocurre con el soporte sugerido. springframework.boot: dependencia spring-boot-configuration-processor y luego agregue un archivo json spring-configuration-metadata.json en el META-INF empaquetado,
código fuente del proyecto
Serie de publicaciones de blog
Las anteriores son opiniones puramente personales. Debido a capacidades personales limitadas, inevitablemente habrá omisiones y errores. Si encuentra errores o sugerencias mejores, puede criticarme y corregirme. p> El siguiente es un blog personal gris, que registra todo el contenido de aprendizaje y trabajo del blog. Todos pueden visitarlo
.