Configuración de Yaml y su sintaxis básica

Archivo de configuración SpringBoot

SpringBoot usa un archivo de configuración global, el nombre del archivo de configuración es fijo

application.properties

Estructura gramatical: clave = valor

application.yml

Estructura de sintaxis: clave: valor de espacio

El rol del archivo de configuración: modificar el valor predeterminado de la configuración automática de SpringBoot, porque SpringBoot nos configura automáticamente en la parte inferior;

Por ejemplo, podemos modificar el número de puerto predeterminado de Tomcat en el archivo de configuración. ¡hazte una prueba!

server.port=8081

Yaml

¡Este lenguaje está centrado en los datos, no en lenguajes de marcado!

La mayoría de los archivos de configuración anteriores se configuran usando xml; por ejemplo, una configuración de puerto simple, comparemos yaml y xml

Configuración xml tradicional:

<server>
    <port>8081<port>
</server>

configuración de yaml:

server:
  prot: 8080

gramática básica de yaml

1. Los espacios no se pueden omitir
2. La sangría se usa para controlar la relación jerárquica, siempre que la columna de datos alineada a la izquierda esté en el mismo nivel.
3. El caso de atributos y valores es muy sensible.

Literal: valor ordinario [número, booleano, cadena]

El literal se puede escribir directamente detrás, y la cadena no necesita estar entre comillas dobles o simples de forma predeterminada;

k: v

Nota:

"" Las comillas dobles no escaparán de los caracteres especiales de la cadena, y los caracteres especiales serán lo que quieran expresar;

Por ejemplo: nombre: "kuang \ n shen" Salida: kuan, salto de línea shen

'' Las comillas simples escaparán de los caracteres especiales, y los caracteres especiales eventualmente se convertirán en caracteres ordinarios.

Por ejemplo: nombre: 'kuang \ n shen' salida: kuang \ n shen

Objeto, mapa (par clave-valor)

#对象、Map格式
k: 
    v1:
    v2:

Escriba las propiedades y las relaciones de valor del objeto en la siguiente línea, prestando atención a la sangría; por ejemplo:

student:
    name: qinjiang
    age: 3

Escritura en línea

student: {
    
    name: qinjiang,age: 3}

Matriz (lista, conjunto)

Use-value para representar un elemento en la matriz, por ejemplo:

pets:
 - cat
 - dog
 - pig

Escritura en línea

pets: [cat,dog,pig]

Modifique el número de puerto predeterminado de SpringBoot

Agregue el parámetro del número de puerto en el archivo de configuración, puede cambiar el puerto;

server:
  port: 8082

archivo de configuración de inyección yaml

Escriba una clase de entidad Perro;

package com.kuang.springboot.pojo;

@Component  //注册bean到容器中
public class Dog {
    
    
    private String name;
    private Integer age;

    
    //有参无参构造、get、set方法、toString()方法  
}

¿Cómo inyectamos valores de propiedad en el bean? @Value, pruébalo para la categoría de perro:

@Component //注册bean
public class Dog {
    
    
    @Value("阿黄")
    private String name;
    @Value("18")
    private Integer age;
}

Inyecte la salida de doggo en la clase de prueba SpringBoot;

@SpringBootTest
class DemoApplicationTests {
    
    

    @Autowired //将狗狗自动注入进来
    Dog dog;

    @Test
    public void contextLoads() {
    
    
        System.out.println(dog); //打印看下狗狗对象
    }

}

El resultado se emite con éxito, la inyección de @Value es exitosa

Estamos escribiendo una clase de entidad más compleja: clase de persona

@Component //注册bean到容器中
public class Person {
    
    
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    
    //有参无参构造、get、set方法、toString()方法  
}

Usemos el método de configuración de yaml para la inyección. Cuando escriba, preste atención a las diferencias y ventajas. ¡Escribamos una configuración de yaml!

person:
  name: qinjiang
  age: 3
  happy: false
  birth: 2000/01/01
  maps: {
    
    k1: v1,k2: v2}
  lists:
   - code
   - girl
   - music
  dog:
    name: 旺财
    age: 1

Hemos escrito todos los valores del objeto persona hace un momento, ¡inyectémoslo en nuestra clase ahora!

/*
@ConfigurationProperties作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
*/
@Component //注册bean
@ConfigurationProperties(prefix = "person")
public class Person {
    
    
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

IDEA solicita, no se encuentra el procesador de anotaciones de configuración de springboot, ¡echemos un vistazo al documento, podemos mirar el documento y encontrar una dependencia!

<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>

Después de confirmar que la configuración anterior está bien, probémosla en la clase de prueba:

@SpringBootTest
class DemoApplicationTests {
    
    

    @Autowired
    Person person; //将person自动注入进来

    @Test
    public void contextLoads() {
    
    
        System.out.println(person); //打印person信息
    }

}

Resultado: ¡Todos los valores se inyectaron correctamente!

Cargue el archivo de configuración especificado

@PropertySource: carga el archivo de configuración especificado;

@configurationProperties: Obtiene el valor del archivo de configuración global de forma predeterminada;

1. Creemos un nuevo archivo person.properties en el directorio de recursos.

name=kuangshen

2. Luego especifique el archivo person.properties que se cargará en nuestro código

@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
    
    

    @Value("${name}")
    private String name;

    ......  
}

3. Genere la prueba de nuevo: ¡el archivo de configuración especificado se enlazó correctamente!

Marcador de posición del archivo de configuración

El archivo de configuración también puede escribir marcadores de posición para generar números aleatorios

person:
    name: qinjiang${
    
    random.uuid} # 随机uuid
    age: ${
    
    random.int}  # 随机int
    happy: false
    birth: 2000/01/01
    maps: {
    
    k1: v1,k2: v2}
    lists:
      - code
      - girl
      - music
    dog:
      name: ${
    
    person.hello:other}_旺财
      age: 1

propiedades distorsionadas problema

Configure en settings–> FileEncodings;
Inserte la descripción de la imagen aquí

Resumen comparativo

Inserte la descripción de la imagen aquí
1. @ConfigurationProperties solo se debe escribir una vez, se debe agregar @Value para cada campo

2. Encuadernación suelta: ¿qué significa esto? Por ejemplo, el apellido escrito en mi yml, esto es lo mismo que apellido, -las letras que siguen están en mayúscula por defecto. Esta es una encuadernación suelta. Puede probarlo

3. Verificación de datos JSR303, esto es que podemos agregar una capa de verificación de filtro en el campo para asegurar la legalidad de los datos.

4. Encapsulación de tipos complejos. Los objetos se pueden encapsular en yml, pero el valor no es compatible

En conclusión:

Tanto el yml de configuración como las propiedades de configuración pueden obtener el valor; se recomienda encarecidamente yml;

Si estamos en una empresa y solo necesitamos obtener un cierto valor en el archivo de configuración, podemos usar @value;

Si decimos que hemos escrito especialmente un JavaBean para mapear uno a uno con el archivo de configuración, simplemente @configurationProperties, ¡no lo dude!

Supongo que te gusta

Origin blog.csdn.net/david2000999/article/details/114480081
Recomendado
Clasificación