La cobertura de configuración es mejor que el perfil
En la práctica de producción, la cobertura de configuración es un método común para resolver diferentes configuraciones en diferentes entornos. Por ejemplo, use archivos de configuración en el servidor de producción para sobrescribir los archivos en el paquete, o use un servicio de configuración centralizado para sobrescribir la configuración comercial predeterminada.
En comparación con el mecanismo de perfil (como el perfil de Maven y las propiedades específicas del perfil de Spring Boot), los diferentes entornos utilizan diferentes archivos de configuración, y el método de superposición es más ventajoso. Los programadores no necesitan preocuparse por la dirección, la cuenta y otra información de la base de datos del entorno de producción durante el desarrollo. Pueden funcionar en diferentes entornos construyendo al mismo tiempo. El mecanismo de perfil debe escribir la configuración del entorno de producción en el archivo de recursos del proyecto, y se deben utilizar diferentes parámetros de construcción u parámetros de operación para diferentes entornos.
Spring proporciona capacidades de expansión de configuración flexibles, con múltiples formas de integrar fuentes de atributos personalizados en él, lo que permite una fácil cobertura de configuración.
Este artículo está escrito basado en Spring Boot 1.4.8/Spring 4.3.12
Use @PropertySource Annotation para implementar archivos de configuración personalizados y anulación de configuración
@ConfigurationProperties@ConfigurationPublic Class Demoproperties {// Propiedades con Getter/Setters} @PropertySource (value = {"test.properties", "file: /etc/test.properties",}, ignorReSourCenotFound = true) @ConfigurationPublic Public DemoAutoconfiguration @PostConstruct public void init () {System.out.println (Demoproperties); }}Spring admite la introducción de archivos de configuración personalizados utilizando anotaciones de PropertySource, donde "Test.Properties" hará que Spring cargue el archivo desde classpath, "archivo: /etc/test.properties" hará que Spring cargue el archivo /etc/test.properties del archivo de archivo del archivo de archivo, ignorReurCenotfund = true lo verdadero hace que la excepción se excita la excepción de la falla de la falla, es, es, es la opción.
Al mismo tiempo, dado que "archivo: /etc/test.properties" se encuentra después de "test.properties", esto permite que el archivo de configuración del sistema de archivos sobrescriba la configuración en classpath.
Fábrica de origen de propiedad personalizada
Si desea personalizar la fuente de la propiedad más flexible, como la carga de configuraciones desde un servicio de configuración centralizado, puede implementar la interfaz PropertySourceFactory y configurar los parámetros de fábrica de la anotación de PropertySource.
@Configuration@PropertySource (valor = ""/*marcador de posición*/, fábrica = compositepropertySourceFactory.class) clase pública CompositeconFigaUtoconfiguration {}El campo Value se utiliza para especificar el archivo de recursos correspondiente a la fuente de configuración. Si no es necesario el archivo de recursos, se puede configurar como cualquier valor. El valor del parámetro se pasará al método CreatePropertySource del parámetro de fábrica.
Si el campo IgnorReSourCenotfound se especifica como verdadero, la excepción lanzada por la fábrica será ignorada, de lo contrario hará que la inicio falle. A veces, es una buena práctica exponer directamente la falla de inicio.
La definición de la interfaz PropertySourceFactory es la siguiente:
/*** Interfaz de estrategia para crear envoltorios {@link PropertySource} basados en recursos. * * @author Juergen Hoeller * @Since 4.3 * @see DefaultPropertySourceFactory * /public interfaz PropertySourceFactory { /** * Cree un {@link PropertySource} que envuelve el recurso dado. * @param Nombre El nombre de la fuente de propiedad * @param recurso El recurso (potencialmente codificado) para envolver * @return el nuevo {@link PropertySource} (nunca {@code null}) * @throws ioexception Si falló */ propiedad de la propiedad <?> CreatePreperTySource (name de cadena, name de stringsource) shurges iMoCeSception;Cabe señalar que el tiempo de carga de PropertySourceFactory es anterior al de los contenedores de frijoles de primavera, por lo que la implementación no puede depender del COI de Spring.
PropertySourceFactory requiere que la clase de implementación devuelva PropertySource. PropertySource es la función de interfaz central de la propiedad Spring (o configuración), y tiene muchas implementaciones, como:
Las clases de implementación reales son muy inferiores a estas. Para fines específicos, puede leer la documentación de primavera o el código fuente.
MappropertySource y CompositEPropertySource se usan comúnmente al personalizar las fuentes de propiedades.
MappropertySource se puede utilizar para envolver los datos de la propiedad que se carga, consulte su método de construcción.
public MappropertySource (nombre de cadena, map <string, objeto> fuente) {super (nombre, fuente);}Este último puede cargar múltiples fuentes de atributos combinando y personalizando el orden de anulación. Por ejemplo:
PropertySource <?> PaqueteInsidePropertySource = paqueteIsidePropertySourceiterateloader.LoadPropertySource (CompositEPropertySource); CompositEPropertySource.AddPropertySource (paqueteinSidePropertySource); PropertySource <?> OuterFilepropertySource = OuterFilepropertySourceiterateloader.LoadPropertySource (CompositEPropertySource); // La prioridad es mayor que la anterior CompositEPropertySource.addfirstPropertySource (OuterFilepropertySource);
El método AddFirstPropertySource puede establecer la propiedad entrante a la más alta prioridad (dentro de este CompositEPropertySource), y el método AddPropertySource es lo contrario, y la prioridad es menor después.
Cargue todos los archivos de configuración con el mismo nombre en el paquete JAR de dependencia
Cargar el archivo de configuración directamente desde ClassPath requiere que el archivo exista en ClassPath. Considere en un proyecto web, si el archivo existe en un paquete JAR de dependencia, es decir, se encuentra en Web-INF/lib/xxx.jar, no se puede cargar directamente en función de ClassPath. En este momento, puede usar el PathMatchingResourcePatternResolver proporcionado por Spring para escanear todos los paquetes JAR por nombre de recursos para lograr el propósito.
Lista privada <conseurce> getPackageInsiderSourcesByPattern (String ResourceName) lanza IOException {String ResourcePathPattern = ResourcePatterNresolver.Classpath_all_Url_Prefix + HbootconfigConstants.Configs + ResourceName; ResourcePatternResolver ResourcePatternResolver = new PathMatchingResourCePternResolver (); return arrays.aslist (ResourcePatherNResolver.getResources (ResourcePathPattern));} Luego puede usar ResourcePropertySource para construir PropertySource de recursos para pasar a la primavera.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.