Aprendizaje de SpringBoot---configuración de yaml

1. ¿Qué es yaml?

Enciclopedia Baidu:

YAML (/ˈjæməl/, que termina en camel-like camel) es un formato muy legible para expresar la serialización de datos. YAML hace referencia a muchos otros lenguajes, incluidos: C, Python, Perl y se inspira en XML, el formato de datos para correo electrónico (RFC 2822). Clark Evans publicó por primera vez el idioma en 2001, e Ingy döt Net y Oren Ben-Kiki también fueron co-diseñadores del idioma. Varios lenguajes de programación o scripting ya admiten (o analizan) este lenguaje.
YAML es un acrónimo recursivo de "YAML no es un lenguaje de marcado" (YAML no es un lenguaje de marcado). Cuando se desarrolló el lenguaje, YAML en realidad significaba "Yet Another Markup Language" (todavía un lenguaje de marcado), pero 以数据做为中心,而不是以标记语言为重点se le cambió el nombre con un acrónimo inverso para enfatizar el lenguaje.

  • El lenguaje yam está centrado en los datos, no en el marcado
  • yaml es especialmente adecuado para expresar o editar estructuras de datos, varios archivos de configuración, descargar contenido de depuración, esquemas de archivos
  • El sufijo del archivo de configuración YAML es .yml, como: runoob.yml

2. sintaxis básica y tipos de datos de yaml

1. sintaxis básica de yaml

  • Distingue mayúsculas y minúsculas
  • Usar sangría para indicar jerarquía
  • La sangría no permite tabulaciones, solo espacios
  • El número de espacios sangrados no importa, siempre que los elementos en el mismo nivel estén alineados a la izquierda
  • '#' significa un comentario

Configuración xml tradicional:


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

configuración yaml:

server:
	port: 8080

2. Tipo de datos

YAML admite los siguientes tipos de datos:

  • Objeto: una colección de pares clave-valor, también conocida como mapeo/hashes/diccionario
  • Array: Un conjunto de valores en orden, también conocido como secuencia/lista
  • escalares: valores únicos e indivisibles
(1) Tipo de objeto

Los pares clave-valor de objeto utilizan una estructura de dos puntos para representar clave: valor, y se requiere un espacio después de los dos puntos.
inserte la descripción de la imagen aquí

Escritura en línea:
inserte la descripción de la imagen aquí

La sangría indica una relación jerárquica, como obtener el ID del administrador:User.admin.id
inserte la descripción de la imagen aquí

Darse cuenta:

  • ¡Debe haber al menos un espacio después de los dos puntos!

inserte la descripción de la imagen aquí

  • " " Las comillas dobles no escaparán de los caracteres especiales en la cadena, y los caracteres especiales se usarán como el significado que quieren expresar.

inserte la descripción de la imagen aquí

  • ' ' comillas simples escaparán de los caracteres especiales, y los caracteres especiales finalmente se mostrarán como caracteres normales.

inserte la descripción de la imagen aquí

Para formatos de objetos más complejos, puede usar un signo de interrogación y un espacio para representar una clave compleja, y dos puntos y un espacio para representar un valor:
inserte la descripción de la imagen aquí
el código anterior significa que la propiedad del objeto es una matriz [arrag0, arrag1] y el valor correspondiente también es una matriz [value1,value2]

(2) tipo de matriz

-Una línea que comienza con representa una matriz y una sola columna representa un elemento de matriz:
inserte la descripción de la imagen aquí
representa una matriz:
inserte la descripción de la imagen aquí
representa un elemento en una matriz:
inserte la descripción de la imagen aquí

Representación en línea: Representación de
inserte la descripción de la imagen aquí
matriz multidimensional: Representación
inserte la descripción de la imagen aquí
en línea:
inserte la descripción de la imagen aquí
Un ejemplo relativamente complejo:
inserte la descripción de la imagen aquí
Representación en línea:
inserte la descripción de la imagen aquí

(3) Estructura compuesta

Las matrices y los objetos pueden formar una estructura compuesta, por ejemplo:
inserte la descripción de la imagen aquí
convertir a json como:

{
    
     
  languages: [ 'Ruby', 'Perl', 'Python'],
  websites: {
    
    
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org',
    Perl: 'use.perl.org' 
  } 
}
(4) Tipo escalar

Un escalar es el valor indivisible más básico, que incluye: Cadena, Booleano, Entero, Punto flotante, Nulo, Hora, Fecha.

inserte la descripción de la imagen aquí

(5) Cotización
  • &Se utiliza para establecer anclas (predeterminado)
  • <<Indica la fusión en los datos actuales
  • *usado para referirse a anclas

inserte la descripción de la imagen aquí
Equivalente a:
inserte la descripción de la imagen aquí

Archivo de configuración de inyección Three.yaml

1. La configuración de yaml se inyecta en la clase de entidad.

¡La parte más poderosa del archivo yaml es que puede inyectar directamente valores coincidentes en nuestras clases de entidad!
Inyección de clase de entidad anterior (a través de Valor ("valor") para la inicialización de clase de entidad):
cree una clase de entidad Comentarios de User.Java
inserte la descripción de la imagen aquí
(no olvide importar las dependencias de lombok):
inserte la descripción de la imagen aquí

Clase de prueba:
inserte la descripción de la imagen aquí
efecto de ejecución:
inserte la descripción de la imagen aquí

Podemos inicializar toda la entidad a través de yaml:
cree un application.yaml en el archivo de recursos
inserte la descripción de la imagen aquí
, agregue el siguiente objeto en application.yam,
inserte la descripción de la imagen aquí
importe dependencias
inserte la descripción de la imagen aquí
, agregue @ConfigurationProperties(prefijo = "usuario") a la clase de entidad
inserte la descripción de la imagen aquí
Nota: el nombre anterior se inicializa como "Li Si", la edad se inicializa a 28

Ejecute la clase de prueba:
inserte la descripción de la imagen aquí
a partir de los resultados de ejecución anteriores, descubrí que el valor de la inyección de nombre es ¿Administrador? ¿Qué?, este no es el nombre de usuario de mi computadora, revisé Internet y dije que user.name puede ser una propiedad del sistema, jaja Bueno aqui esta el nombre Modifícalo a userName (o modifica el usuario del valor de @ConfigurationProperties)
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Por supuesto también se debe modificar la clase test:
inserte la descripción de la imagen aquí

Luego ejecútelo de nuevo (a partir de la operación anterior, inyección de @value y yaml, en el caso de uso simultáneo, el valor final inicializado es el archivo de configuración de yaml):
inserte la descripción de la imagen aquí

2.yaml carga el archivo de configuración especificado

  • @configurationProperties: obtenga el valor del archivo de configuración global de forma predeterminada;
  • @PropertySource: carga el archivo de configuración especificado;

@configurationPropertiesm se usa cuando se inyectan clases de entidad a través de yaml arriba. Esta etiqueta indica que el valor se obtiene del archivo de configuración global (archivos globales: xxx.properties y xxx.yaml) de forma predeterminada. Además, hay un @PropertySource que indica la carga del archivo de configuración especificado;

Ejemplo:
agregar un archivo people.properties
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí

Use la etiqueta @PropertySource en la clase de entidad y luego vincule las propiedades en el archivo de propiedades individualmente a través de @Value("${name}"):
inserte la descripción de la imagen aquí

Observación: comentar @ConfigurationProperties (prefijo = "usuario")

Ejecute la clase de prueba:
inserte la descripción de la imagen aquí

Nota: Cuando el archivo de configuración de propiedades está escrito en chino, habrá caracteres distorsionados. Necesitamos ir a IDEA para establecer el formato de codificación en UTF-8;
Archivo->Configuración...
inserte la descripción de la imagen aquí
Modifique la codificación a UTF-8 en el cuadro rojo en FileEncodings y
inserte la descripción de la imagen aquí
vuelva a ejecutar (xxx. No es necesario agregar cadenas en las propiedades ""):
inserte la descripción de la imagen aquí

  • @configurationProperties与@PropertySource

inserte la descripción de la imagen aquí

  • Los archivos yaml actualmente no admiten el uso de anotaciones @PropertySource(""), pero se admite @ConfigurationProperties(prefix = "")
  • @ConfigurationProperties solo debe escribirse una vez, @Value debe agregarse a cada campo
  • Enlace suelto: escriba el apellido en yaml, que se puede asignar al apellido nombrado en camel case en la clase Java. La primera letra después de '-' está en mayúsculas por defecto
  • Verificación de datos JSR303: agregue una capa de verificación de filtro al campo para garantizar la legalidad de los datos
  • Encapsulación de tipo complejo, los objetos se pueden encapsular en yml, pero no se admiten usando valor

4. Verificación de datos JSR303

En Springboot, @validated se puede usar para verificar datos.Si los datos son anormales, se lanzará una excepción de manera uniforme, lo cual es conveniente para el procesamiento unificado del centro de excepciones. Escribamos una nota aquí para que nuestro nombre solo pueda admitir el formato de correo electrónico;

  • Dependencias de importación:

inserte la descripción de la imagen aquí

  • Cree una nueva clase EmailInfo:

inserte la descripción de la imagen aquí
Inyectar parámetros a emailPath en application.yaml:
inserte la descripción de la imagen aquí

  • Clase de prueba:

inserte la descripción de la imagen aquí
resultado de ejecución:
inserte la descripción de la imagen aquí

Modifique el formato de emailPath en application.yaml al formato de buzón:
inserte la descripción de la imagen aquí
ejecute de nuevo:
inserte la descripción de la imagen aquí
use la verificación de datos para garantizar la exactitud de los datos, parámetros de verificación comunes:


@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;

空检查
@Null       验证对象是否为null
@NotNull    验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank   检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty   检查约束元素是否为NULL或者是EMPTY.
    
Booelan检查
@AssertTrue     验证 Boolean 对象是否为 true  
@AssertFalse    验证 Boolean 对象是否为 false  
    
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内  
@Length(min=, max=) string is between min and max included.

日期检查
@Past       验证 Date 和 Calendar 对象是否在当前时间之前  
@Future     验证 Date 和 Calendar 对象是否在当前时间之后  
@Pattern    验证 String 对象是否符合正则表达式的规则

.......等等
除此以外,我们还可以自定义一些数据校验规则

5. Conmutación multientorno

Cuando escribimos el archivo de configuración principal, el nombre del archivo puede ser application-{profile}.properties/yaml
para especificar varias versiones del entorno;

Por ejemplo:
propiedades:

  • application-test.properties representa la configuración del entorno de prueba
  • application-dev.properties representa la configuración del entorno de desarrollo
  • configuración del entorno oficial application-prod.properties

Yaml:

  • application-test.yaml representa la configuración del entorno de prueba
  • application-dev.yaml representa la configuración del entorno de desarrollo
  • application-prod.yaml Configuración del entorno formal

1. Conmutación multientorno de propiedades

Pero Springboot no inicia estos archivos de configuración directamente, usa el archivo de configuración principal application.properties por defecto,
necesitamos seleccionar el entorno que necesita ser activado a través de una configuración:

spring.profiles.active=dev: configura el entorno usando application-dev.properties

Cree application-test.properties y application-dev.properties
inserte la descripción de la imagen aquí
Configure el puerto en 8088
inserte la descripción de la imagen aquí
en application.properties y configure el puerto en 8090 en application-test.properties
inserte la descripción de la imagen aquí

Configure el puerto en 8089 en application-dev.properties.
inserte la descripción de la imagen aquí
Nota: He importado las dependencias web cuando creé el proyecto. Si no hay importación, necesito importarla manualmente, de la siguiente manera:
inserte la descripción de la imagen aquí
Ejecute el proyecto:
inserte la descripción de la imagen aquí
Agregar ** spring.profiles.active=dev* *
inserte la descripción de la imagen aquí
efecto de ejecución en application.properties:
inserte la descripción de la imagen aquí

Conmutación multientorno 2.yml

Cree un archivo application.yaml y agregue la siguiente configuración al archivo:

server:
  port: 8081
#选择要激活那个环境块
spring:
  profiles:
    active: prod

---
server:
  port: 8083
spring:
  profiles: dev #配置环境的名称


---

server:
  port: 8084
spring:
  profiles: prod  #配置环境的名称

Comente la configuración en application.properties:
inserte la descripción de la imagen aquí
Efecto de ejecución:
inserte la descripción de la imagen aquí

Es lo mismo que en el archivo de configuración de propiedades, pero es más conveniente usar yml para implementar sin crear múltiples archivos de configuración.Si tanto yml como propiedades están configurados con puertos al mismo tiempo, y no se activa ningún otro entorno, las propiedades El archivo de configuración se utilizará de forma predeterminada.

3. Ubicación de carga del archivo de configuración

Hay muchas formas de cargar archivos de configuración externamente. ¡Podemos elegir los más utilizados y configurarlos en los archivos de recursos desarrollados!

La descripción oficial del archivo de configuración externa hace referencia a cuatro directorios en el documento de referencia:

  • archivo:./config/
  • expediente:./
  • ruta de clase:/config/
  • ruta de clase:/

El inicio de springboot escaneará los archivos application.properties o application.yml en las siguientes ubicaciones como los archivos de configuración predeterminados de Spring boot: la
prioridad es de mayor a menor, y la configuración de alta prioridad anulará la configuración de baja prioridad:

  • Prioridad 1: archivo de configuración de la carpeta config en la ruta del proyecto
  • Prioridad 2: archivo de configuración en la ruta del proyecto
  • Prioridad 3: archivo de configuración de la carpeta config en la ruta del recurso
  • Prioridad 4: archivo de configuración en la ruta del recurso

Cree un nuevo proyecto SpringBoot para probarlo:
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Cree una aplicación.yaml en el archivo del proyecto (el puerto de configuración es 9002) y luego cree un archivo de configuración y cree una aplicación.yaml en el archivo (el puerto de configuración es 9001).
inserte la descripción de la imagen aquí
Luego cree application.yaml (establezca el puerto en 9004) y application.yam en el directorio de configuración (establezca el puerto en 9003) en el archivo de recursos (resources) en el proyecto src

Cargar dependencias web:
inserte la descripción de la imagen aquí

Ejecute el proyecto:
(ejecute primero el puerto 9001 para ejecutar la configuración application.yaml en el archivo de configuración del proyecto, luego coméntelo y ejecútelo de nuevo)
inserte la descripción de la imagen aquí

Ejecute el proyecto:
(Ejecute el puerto 9002, ejecute la configuración application.yaml en el proyecto, luego coméntelo y ejecútelo de nuevo)
inserte la descripción de la imagen aquí
Ejecute el proyecto:
(Ejecute el puerto 9003, ejecute el archivo de configuración en el archivo de recursos (resources) en src en la configuración del proyecto application.yaml, luego coméntelo y ejecútelo de nuevo)
inserte la descripción de la imagen aquí

Ejecute el proyecto:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42753193/article/details/123449924
Recomendado
Clasificación