(3) Archivo de configuración de Spring Boot, orden de carga, principio de configuración

Contenido del articulo :

  • Uso básico del archivo de configuración SpringBoot;
  • Explicar la prioridad del archivo de configuración yaml;
  • directorio de archivos de configuración yaml e instrucciones de comparación;
  • Propiedades de configuración personalizadas;
  • Comparación de dos anotaciones @ConfigurationProperties y @Value;
  • Sugerencias de configuración de idea personalizada yaml
  • Cargar configuración externa;
  • Archivo de configuración de ensamblaje (propiedades, yaml);
  • Introduce el archivo de configuración xml.

Primero, el uso básico del archivo de configuración SpringBoot

(1) SpringBoot utiliza un archivo de configuración global, el nombre del archivo de configuración es fijo;

  • solicitud. propiedades
  • aplicación marga
  • Sintaxis básica de YAML
       - Use sangría para representar relaciones jerárquicas
       - Las teclas de tabulación no están permitidas al sangrar , solo se permiten espacios .
       - El número de espacios sangrados no es importante, siempre que los elementos del mismo nivel estén alineados a la izquierda
       - mayúsculas y minúsculas
  • Tres estructuras de datos compatibles con YAML
     - Objeto: una colección de pares clave-valor
     - Matriz: un conjunto de valores ordenados en orden
     - Literales: valores únicos e indivisibles

(2) Conclusión práctica: en el mismo directorio , prioridad de configuración de propiedades> prioridad de configuración de YAML.

                           Por lo tanto, podemos traer la configuración de propiedades cuando el paquete jar comienza a anular la configuración

(3) Directorio del archivo de configuración:

     El archivo de configuración de SpringBoot se puede colocar en varias rutas, y la prioridad de configuración en diferentes rutas es diferente. Directorio colocable (prioridad de mayor a menor)

  1. archivo: ./ config / (directorio de configuración de ruta del proyecto actual);
  2. archivo: ./ (bajo la ruta actual del proyecto);
  3. classpath: / config / (bajo el directorio de configuración classpath);
  4. classpath: / (en la configuración de classpath). 

La prioridad es de mayor a menor. La configuración de alta prioridad anulará la configuración de baja prioridad ; SpringBoot cargará los archivos de configuración desde estas cuatro ubicaciones y complementará la configuración ;

  •   Clase dependiente de la ruta: ConfigFileApplicationListener

    

      El atributo DEFAULT_SEARCH_LOCATIONS establece el directorio cargado; en el método getSearchLocations () , la coma se analiza en un conjunto, y el cargador de clases interno es responsable del proceso de carga de este archivo de configuración, incluida la carga de la configuración del entorno especificado del perfil , en forma de aplicación + '-' + nombre Carga .

private Set<String> getSearchLocations() {
      if (this.environment.containsProperty("spring.config.location")) {
         return this.getSearchLocations("spring.config.location");
        } else {
                Set<String> locations = 
           this.getSearchLocations("spring.config.additional-location");
                locations.addAll(
                   this.asResolvedSet(ConfigFileApplicationListener.this.searchLocations, 
                  "classpath:/,classpath:/config/,file:./,file:./config/"));
                return locations;
            }
        }

  Después de agregar a la Lista, invierta el orden de recolección:

private Set<String> asResolvedSet(String value, String fallback) {
            List<String> list = Arrays.asList(StringUtils.trimArrayElements
                  (StringUtils.commaDelimitedListToStringArray(value != null ? 
                       this.environment.resolvePlaceholders(value) : fallback)));
            Collections.reverse(list);
            return new LinkedHashSet(list);
        }

 En resumen:

   Luego, tome la configuración del puerto como ejemplo

  1. Establezca el puerto en 8888 en el archivo de configuración en el directorio resources /;
  2. El archivo de configuración en el directorio resources / config establece el puerto en 9999;
  3. Establezca el puerto en 6666 en el archivo de configuración en la ruta del proyecto;
  4. El archivo de configuración en el directorio de configuración de la ruta del proyecto establece el puerto en 7777;

               å¨è¿éæå ¥ å¾çæè¿ °

Resultado final de la operación:

  

Mediante el método de la variable de control, se puede demostrar
que la prioridad es de mayor a menor, y la configuración de alta prioridad anulará la configuración de baja prioridad

Segundo, reglas de acceso a recursos estáticos, método de configuración de archivos estáticos personalizados

En tercer lugar, la forma en que el archivo de configuración vincula el valor al bean

(1) Use la anotación @ConfigurationProperties + @ Component en Spring Boot

@Component
@ConfigurationProperties(locations = "classpath:mail.properties", 
                                     ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
    private String from;
    private String username;
    private String password;
    private Smtp smtp;
}

(2) @ Bean + @ ConfigurationProperties para el enlace

    @Bean
    @ConfigurationProperties(locations = "classpath:mail.properties", prefix = "mail")
    public MailProperties mailProperties(){
        MailProperties mp = new MailProperties();
        System.out.println("zheli " + mp);
        return mp;

    }

  (3) @ConfigurationProperties + @EnableConfigurationProperties, y luego usa Spring's @Autowirepara inyectar el bean de configuración de correo:

@ConfigurationProperties(locations = "classpath:mail.properties", 
                                ignoreUnknownFields = false, prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
    private String from;
    private String username;
    private String password;
    private Smtp smtp;
}

El método (3) requiere @EnableConfigurationProperties (Person.class) al final para que @ConfigurationProperties: efectivo

Luego, en la clase de inicio, configure @EnableConfigurationProperties de la siguiente manera, y luego inyecte @Autowired donde se usa

@SpringBootApplication
@EnableConfigurationProperties(MailProperties.class)
public class TestProperty1 {

    @Autowired
    private MailProperties mailProperties;

}

Cuarto, @Value obtiene el valor y @ConfigurationProperties obtiene la comparación del valor

Nota : el archivo de configuración yml o las propiedades pueden obtener sus valores; ( tipos complejos como mapas, listas, etc. )

  • Si decimos que solo necesitamos obtener un valor en el archivo de configuración en una lógica comercial determinada, use @Value;
  • Si decimos que escribimos especialmente un javaBean para mapear con el archivo de configuración, usaremos @ConfigurationProperties directamente;

La verificación de datos se agrega al archivo de configuración:

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式
    @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;

    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

Seis, cargue el archivo de configuración especificado

(1) @ PropertySource & @ ImportResource & @ Bean

  • @ PropertySource : carga el archivo de configuración especificado;
/**
 * 将配置文件中配置的每一个属性的值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射
 *
 * 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
 *  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;
 *
 */
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
     * <bean/>
     */

   //lastName必须是邮箱格式
   // @Email
    //@Value("${person.last-name}")
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
  • @ ImportResource : Importar archivo de configuración del resorte, de modo que el contenido del archivo de configuración que es para tener efecto;

    No hay un archivo de configuración de Spring en Spring Boot, y el archivo de configuración que escribimos nosotros mismos no puede reconocerse automáticamente;

    Quiero que el archivo de configuración de Spring surta efecto y lo cargue; @ImportResource está marcado en una clase de configuración

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

Para escribir archivos de configuración de Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="helloService" class="com.atguigu.springboot.service.HelloService"></bean>
</beans>

SpringBoot recomienda agregar componentes al contenedor ; se recomienda utilizar el método de anotación completo

1. Clase de configuración @Configuration ------> Archivo de configuración Spring

2. Use @Bean para agregar componentes al contenedor

/**
 * @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
 *
 * 在配置文件中用<bean><bean/>标签添加组件
 *
 */
@Configuration
public class MyAppConfig {

    //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
    @Bean
    public HelloService helloService02(){
        System.out.println("配置类@Bean给容器中添加组件了...");
        return new HelloService();
    }
}

 

108 artículos originales publicados · Me gusta 58 · Visitas 50,000+

Supongo que te gusta

Origin blog.csdn.net/qq_41893274/article/details/104712405
Recomendado
Clasificación