Configuración de Springboot

1. Gramática básica y expresión de yml

1. Gramática básica de yaml

1. k: (espacio) v representa un par clave-valor

key: value

2. Use sangría para indicar relaciones jerárquicas

key:
	child-key1: value1
	child-key2: value2

3. Los atributos y valores distinguen entre mayúsculas y minúsculas
4. Comentarios
Utilice # para los comentarios

#xxxxxxx
key: value

2. La expresión de valor

1. Objeto

Student:
	name: tom
	age: 11
#行内写法
Student: {
    
    name:tom,age:11}

2. Matriz

nums: 
	- 1
	- 2
	- 3
#行内写法
nums: {
    
    1,2,3}

Dos, archivo de configuración de springboot

Puede importar el procesador de archivos de configuración antes de escribir, por lo que habrá un mensaje al escribir yml

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

1. Inyección de valores de archivo de configuración

Requisito previo: El Javabean correspondiente al archivo de configuración debe colocarse en el contenedor IOC, es decir, utilizando la anotación @Component

El método 1
usa @ConfigurationProperties (prefix = "person") para establecer un valor de enlace y establecer las propiedades de la clase a través de este valor de enlace en el archivo de configuración.

javabean

@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    
    
    private String lastName;
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;
    ....
}
@Component
public class Dog {
    
    
    private String name;
    private Integer age;
    ...
}

archivo de configuración yml

person:
  lastname: zhangsan
  age: 11
  boss: true
  date: 2010/11/11
  maps: {
    
    k1: v1,k2: v2}
  list:
    - list1
    - list2
    - list3
  dog:
    name: xiaoming
    age: 2

resultado:

Person{lastName='zhangsan', age=11, boss=true, date=Thu Nov 11 00:00:00 CST 2010, maps={k1=v1, k2=v2, kw=v2}, list=[list1, list2, list3], dog=Dog{name='xiaoming', age=2}}

Método 2:
puede asignar el valor al objeto utilizando @PropertySource para especificar el archivo de configuración de propiedades

Archivo de configuración

person.last-name=张三
person.age=11
person.boss=false
person.date=2021/2/2
person.maps.k1=v1
person.maps.kw=v2
person.list=a,x,c,v
person.dog.name = dog
person.dog.age = 15

javabean

/**
 * 将配置文件中的每一个属性的值映射到这个组件中
 * @ConfigurationProperties 高数springboot将本类中所有属性和配置文件中相关的配置进行绑定
 *      prefix 在配置文件中哪个下面的所有属性进行一一映射
 * 只有这个组件是容器中的组件,才能提供@ConfigurationProperties的功能
 *
 * @PropertySource 导入spring的配置文件,让配置文件中的内容生效
 */
@PropertySource(value = {
    
    "classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    
    
    private String lastName;
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;
    ...
}

resultado

Person{lastName='张三', age=11, boss=false, date=Tue Feb 02 00:00:00 CST 2021, maps={k1=v1, kw=v2}, list=[a, x, c, v], dog=Dog{name='dog', age=15}}

Método 3
Utilice la anotación @Value para asignar valor al atributo

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

    @Value("zhangsan")
    private String lastName;
    @Value("11")
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;

resultado

Person{lastName='zhangsan', age=11, boss=false, date=null, maps=null, list=null, dog=null}

2, @Value obtiene valor y @ConfigurationProperties obtiene comparación de valor

@Propiedades de configuración @Valor
Caracteristicas Inyección masiva de propiedades en archivos de configuración Especificar uno por uno
Vinculado libremente (sintaxis flexible) colocarse no apoyo
Juego no apoyo colocarse
Verificación de datos JSR303 colocarse no apoyo
Paquete de tipo complejo colocarse no apoyo

Tanto el archivo de configuración yml como las propiedades pueden obtener el valor;

Si decimos que solo necesitamos obtener un valor en el archivo de configuración en una determinada lógica empresarial, use @Value;

Si decimos que hemos escrito especialmente un JavaBean para mapearlo con el archivo de configuración, usaremos directamente @ConfigurationProperties;

3. Verificación de datos de inyección de archivos de configuración

Antes de usar la verificación, debe importar la dependencia de la verificación de campo

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.2.4.Final</version>
        </dependency>

Primero use la anotación @Validated para decorar la clase que se va a verificar, y luego use las siguientes anotaciones para decorar las propiedades que se verificarán en la clase

Pedir prestado

@AssertFalse 校验false
@AssertTrue 校验true
@Email 校验是否是邮箱格式
@DecimalMax(value=,inclusive=) 小于等于value,
inclusive=true,是小于等于
@DecimalMin(value=,inclusive=) 与上类似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull  检查Null
@Past  检查日期
@Pattern(regex=,flag=)  正则
@Size(min=, max=)  字符串,集合,map限制大小
@Validate 对po实体类进行校验

Utilice la inyección de archivos de configuración del modo tres

@PropertySource(value = {
    
    "classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    
    

//    @Value("zhangsan")
    @Email
    private String lastName;
//    @Value("11")
    private Integer age;
    private boolean boss;
    private Date date;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;
	...
}

resultado:

java.lang.IllegalStateException: Failed to load ApplicationContext

4. Marcador de posición del archivo de configuración

#配置person的值
#配置文件的占位符${},如果想设没有的默认值可以用${name:defualt}
#通过使用${random.xxxx}随机数 例${random.value}、${random.int}、${random.long}、${random.int(10)}、${random.int[1024,65536]}等等
person.last-name=张三${random.int}
person.age=11
person.boss=false
person.date=2021/2/2
person.maps.k1=v1
person.maps.kw=v2
person.list=a,x,c,v
person.dog.name = ${person.hello:hello}dog
person.dog.age = 15

resultado

//结果1
Person{lastName='张三-1155973093', age=11, boss=false, date=Tue Feb 02 00:00:00 CST 2021, maps={k1=v1, kw=v2}, list=[a, x, c, v], dog=Dog{name='hellodog', age=15}}
//结果2
Person{lastName='张三1191295749', age=11, boss=false, date=Tue Feb 02 00:00:00 CST 2021, maps={k1=v1, kw=v2}, list=[a, x, c, v], dog=Dog{name='hellodog', age=15}}

5. Varios archivos de perfil

1. Archivo de múltiples perfiles Cuando
escribimos el archivo de configuración principal, el nombre del archivo puede ser application- {profile} .properties / yml
. La configuración de
Inserte la descripción de la imagen aquí
application.properties se usa por defecto; archivo application.properties

#激活使用application-dev.properties配置文件
spring.profiles.active=dev

archivo application-dev.properties

#使用application-{profile},properties/yml取配置文件名
#默认使用的是application.properties
server.port=8081

archivo application-prod.properties

server.port=8082

resultado
Inserte la descripción de la imagen aquí

2. yml admite varios bloques de documentos

#yml支持多文档块方式用 --- 来分割文档块
server:
  port: 8080
spring:
  profiles:
    active: prod
---
server:
  port: 8081
spring:
  profiles: dev #制定属于那个环境
---
server:
  port: 8082
spring:
  profiles: prod
---

resultado
Inserte la descripción de la imagen aquí

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

El inicio de Springboot escaneará el archivo application.properties o application.yml en la siguiente ubicación como el archivo de configuración predeterminado para Spring Boot

archivo: ./ config /

archivo:./

ruta de clase: / config /

classpath: /

La prioridad es de alta a baja y la configuración con prioridad alta anulará la configuración con prioridad baja;

SpringBoot cargará el archivo de configuración principal desde estas cuatro ubicaciones: configuración complementaria ;

Inserte la descripción de la imagen aquí
También puede cambiar la ubicación del archivo de configuración predeterminada a través de spring.config.location

7. Secuencia de carga de la configuración externa

SpringBoot también puede cargar la configuración desde las siguientes ubicaciones; prioridad de alta a baja; la configuración de alta prioridad anula la configuración de baja prioridad, todas las configuraciones formarán configuraciones complementarias

1. Parámetros de la línea de comandos

Todas las configuraciones se pueden especificar en la línea de comando

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port = 8087 --server.context-path = / abc

Varias configuraciones están separadas por espacios; - elemento de configuración = valor

2. Atributos JNDI de java: comp / env

3. Propiedades del sistema Java (System.getProperties ())

4. Variables de entorno del sistema operativo

5. Valor de propiedad aleatorio. * Configurado por RandomValuePropertySource

Busque desde el paquete jar al paquete jar;

Cargar con perfil primero

6. Archivo de configuración Application- {profile} .properties o application.yml (con spring.profile) fuera del paquete jar

7. Archivo de configuración Application- {profile} .properties o application.yml (con spring.profile) dentro del paquete jar

Cargar de nuevo sin perfil

8. Archivo de configuración Application.properties o application.yml (sin spring.profile) fuera del paquete jar

9. Archivo de configuración Application.properties o application.yml (sin spring.profile) dentro del paquete jar

10. @ PropertySource en @Configuration Annotated Class

11. Las propiedades predeterminadas especificadas por SpringApplication.setDefaultProperties

Todas las fuentes de carga de configuración admitidas;

Consulte los documentos oficiales

Supongo que te gusta

Origin blog.csdn.net/magicproblem/article/details/110132841
Recomendado
Clasificación