[SpringBoot desde la entrada hasta el dominio] Capítulo 4 Archivo de configuración de Springboot

Cuatro, archivo de configuración de Springboot

4.1 Archivo de configuración predeterminado

Springboot utiliza un archivo de configuración global con un nombre de archivo de configuración fijo application.

El rol del archivo de configuración: Modificar el valor por defecto de la configuración automática de Springboot.

La ubicación del archivo de configuración: por defecto en el directorio src/main/resources .

Si agrega la siguiente configuración en el archivo application.properties:

server.port=8090

Al ejecutar el proyecto, encontrará que el puerto en ejecución se ajusta a 8090.

inserte la descripción de la imagen aquí

4.2 yaml

Además del archivo de propiedades que se puede usar en Springboot, también se puede usar un nuevo formato de archivo YAML .

4.2.1 Introducción

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". Centrado en datos, es más adecuado para archivos de configuración que json, xml, etc.

Si se configuran dos archivos de configuración al mismo tiempo, ambos funcionarán, pero los dos archivos de configuración tienen prioridad.

aplicación.propiedades > aplicación.yml

4.2.2 Sintaxis básica de yml

  • clave: valor, debe haber espacios entre los pares clave-valor (la clave está resaltada);
  • Distingue mayúsculas y minúsculas;
  • Use saltos de línea y sangrías para representar relaciones jerárquicas;
  • No se permiten tabulaciones para la sangría, solo se permiten espacios;
  • No hay requisitos para la cantidad de espacios al sangrar, siempre que los elementos en el mismo nivel estén alineados a la izquierda;
  • Un signo de libra '#' indica un comentario.

4.2.3 estructura de datos yml

4.2.3.1 Valores literales

Un solo valor que no se puede subdividir. Número (número), carácter (cadena), valor booleano (booleano), fecha (fecha), valor vacío (nulo).

Ejemplo:

#字面值
number: 123
str: hello
date: 2021/08/16
flag: true
obj: ~

Las cadenas no necesitan comillas simples o dobles de forma predeterminada. Si la cadena contiene espacios o caracteres especiales, debe estar entre comillas.

  • Comillas dobles: los caracteres especiales en la cadena no se escaparán y los caracteres especiales se usarán como el significado que quieren expresar.
  • Comillas simples: los caracteres especiales se escapan y los caracteres especiales son solo una cadena de datos ordinaria al final.
  • Si hay comillas simples en las comillas simples, debe usar dos comillas simples consecutivas para escapar.
str1: "how are you"
str2: "how\nare\nyou"
str3: 'hello\n''abc'''

4.2.3.2 Matrices

Un conjunto ordenado de valores. También conocido como secuencia (secuencia) o lista (list).

Ejemplo:

Representa un elemento en una matriz con -un valor .

#数组
array1:
  - java
  - html
  - css
  - js

Escritura en línea:

array2: [tom, jerry, chris]

4.2.3.3 Objetos

Una colección de pares clave-valor, también conocida como mapeo, hash o diccionario.

Ejemplo:

#对象
student:
  id: 10
  name: 张三
  age: 20
  gender: true
  birth: 1996/12/08
  skill: [java, spring, mysql]

Escritura en línea:

address: {
    
    province: 河南省, city: 郑州市, area: 高新区, street: 迎春街, num: 18号}

4.3 Lectura del archivo de configuración

La configuración se usa a menudo en el desarrollo de proyectos. Además de modificar la configuración predeterminada de los componentes Spring y los componentes de terceros en el archivo de configuración, también se escribirá información de configuración personalizada. ¿Cómo leer la configuración personalizada?

4.3.1 @Valor

Use la anotación @Value + SpringEL para leer la información de configuración y use la expresión ${nombre clave en el archivo de configuración} en el elemento de configuración de @Value para leer.

@RestController
public class ReadConfigController {
    
    

    @Value("${number}")
    private Integer number;

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

    @Value("${date}")
    private Date date;

    @Value("${flag}")
    private Boolean flag;

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

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

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

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

    @Value("${array[0]}")
    public String arrayItem;

    @GetMapping("/getValue")
    public String getValue(){
    
    
        System.out.println("数字:" + number);
        System.out.println("字符:" + str);
        System.out.println("日期:" + date);
        System.out.println("布尔:" + flag);
        System.out.println("str1:" + str1);
        System.out.println("str2:" + str2);
        System.out.println("str3:" + str3);
        System.out.println("学生姓名:" + stuName);
        System.out.println("数组元素:" + arrayItem);
        return "ok";
    }

}

Acceso: http://localhost:8090/getValue, resultado de la entrada de la consola:

数字:123
字符:hello
日期:Mon Aug 16 00:00:00 CST 2021
布尔:true
str1:how are you
str2:how
are
you
str3:hello\n'abc'
学生姓名:张三
数组元素:java

4.3.2 Medio ambiente

Este método se logra inyectando Evnironment (objeto de entorno) por dependencia y luego usándolo env.getProperty("键名")para leer el valor correspondiente.

@Autowired
private Environment env;

@GetMapping("/getEnv")
public String getEnv(){
    
    
    System.out.println("数字:" + env.getProperty("number"));
    System.out.println("字符:" + env.getProperty("str"));
    System.out.println("学生姓名:" + env.getProperty("student.name"));
    System.out.println("学生年龄:" + env.getProperty("student.age"));
    return "ok";
}

Acceso: http://localhost:8090/getEnv, resultado de la entrada de la consola:

数字:123
字符:hello
学生姓名:张三
学生年龄:20

4.4 Enlace de configuración

El enlace de configuración también es una forma de leer archivos de configuración, que se puede decir que lee archivos de configuración en lotes. Utilice Java para leer el contenido del archivo de configuración y encapsúlelo en un JavaBean para su uso inmediato.

4.4.1 @ConfigurationProperties + @Component

Se debe usar una anotación especial @ConfigurationProperties, que debe proporcionar un prefijo de elemento de configuración, indicando la especificación del nombre del prefijo en el archivo yml.

@ConfigurationPropertiesEs una anotación proporcionada por springboot para leer archivos de configuración.

@ConfigurationProperties(prefix = "student")Indica leer la información de configuración con el prefijo estudiante.

Configurar clase de enlace:

@Component
@ConfigurationProperties(prefix = "student")
public class StudentProperties {
    
    

    private Integer id;
    private String name;
    private Integer age;
    private Boolean gender;
    private Date birth;
    private String[] skill;

    public Integer getId() {
    
    
        return id;
    }

    public void setId(Integer id) {
    
    
        this.id = id;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public Integer getAge() {
    
    
        return age;
    }

    public void setAge(Integer age) {
    
    
        this.age = age;
    }

    public Boolean getGender() {
    
    
        return gender;
    }

    public void setGender(Boolean gender) {
    
    
        this.gender = gender;
    }

    public Date getBirth() {
    
    
        return birth;
    }

    public void setBirth(Date birth) {
    
    
        this.birth = birth;
    }

    public String[] getSkill() {
    
    
        return skill;
    }

    public void setSkill(String[] skill) {
    
    
        this.skill = skill;
    }
}

Leer configuración:

@Autowired
private StudentProperties studentProperties;

@GetMapping("/readStudent")
public StudentProperties readStudent(){
    
    
    return studentProperties;
}

inserte la descripción de la imagen aquí

4.4.2 @ConfigurationProperties + @EnableConfigurationProperties

Use la anotación @ConfigurationProperties para leer la configuración y use la anotación @EnableConfigurationProperties en la clase de configuración para habilitar el enlace de configuración.

Nota: este método se usa principalmente para clases de enlace de configuración de terceros, como WebMvcProperties.

Configurar clase de enlace:

@ConfigurationProperties(prefix = "address")
public class AddressProperties {
    
    

    private String province;
    private String city;
    private String area;
    private String street;
    private String num;

    public String getProvince() {
    
    
        return province;
    }

    public void setProvince(String province) {
    
    
        this.province = province;
    }

    public String getCity() {
    
    
        return city;
    }

    public void setCity(String city) {
    
    
        this.city = city;
    }

    public String getArea() {
    
    
        return area;
    }

    public void setArea(String area) {
    
    
        this.area = area;
    }

    public String getStreet() {
    
    
        return street;
    }

    public void setStreet(String street) {
    
    
        this.street = street;
    }

    public String getNum() {
    
    
        return num;
    }

    public void setNum(String num) {
    
    
        this.num = num;
    }
}

El enlace de configuración se puede habilitar en el programa principal o en la clase de configuración:

@SpringBootApplication
//启用指定的配置绑定类
@EnableConfigurationProperties({
    
    AddressProperties.class})
public class Springboot03ConfigApplication {
    
    

    public static void main(String[] args) {
    
    
        SpringApplication.run(Springboot03ConfigApplication.class, args);
    }
}

Leer configuración:

@Autowired
private AddressProperties addressProperties;

@GetMapping("/readAddress")
public AddressProperties readAddress(){
    
    
    return addressProperties;
}

inserte la descripción de la imagen aquí

4.4.3 Consejos de configuración

Por lo general, no hay un aviso para la clase de lectura de configuración personalizada y el enlace del archivo de configuración.Si necesita un aviso, puede agregar dependencias maven en el archivo pom.xml.

<!--配置解析依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

Después de reiniciar el programa Springboot, deje que el analizador yml surta efecto y luego escriba el valor del nodo de configuración en el archivo yml, y aparecerán las indicaciones correspondientes.

4.4.4 Comparación del valor de adquisición de @Value y el valor de adquisición de @ConfigurationProperties

artículo @Propiedades de configuración @Valor
Función Inyección por lotes de atributos en archivos de configuración designación única
encuadernación suelta (sintaxis suelta) apoyo no apoyo
Juego no apoyo apoyo
Validación de datos JSR303 apoyo no apoyo
encapsulación de tipo complejo apoyo no apoyo

sugerencia:

  • Si solo necesita obtener un determinado valor en el archivo de configuración en una determinada lógica comercial, use @Value.
  • Si un JavaBean está especialmente escrito para vincularse al archivo de configuración, usamos @ConfigurationProperties directamente.
  • Encuadernación suelta: https://blog.csdn.net/u011628753/article/details/125431909

4.5 Archivos de configuración nativos

De forma predeterminada, Springboot solo admite archivos de configuración en formato de propiedades y yaml, y el nombre es aplicación. Si aún necesita usar archivos de configuración nativos, puede usar las siguientes dos anotaciones.

4.5.1 @ImportarRecurso

La anotación @ImportResource puede importar los archivos de configuración tradicionales de Spring para que el contenido de configuración en los archivos de configuración tenga efecto.

Clase de frijol:

public class Dept {
    
    

    @Override
    public String toString() {
    
    
        return "Dept对象";
    }
}

public class Emp {
    
    

    private Dept dept;

    public void setDept(Dept dept) {
    
    
        this.dept = dept;
    }

    @Override
    public String toString() {
    
    
        return "Emp对象{" +
                "dept=" + dept +
                '}';
    }
}

Configuración xml nativa:

<?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="dept" class="com.newcapec.bean.Dept"/>
    <bean id="emp" class="com.newcapec.bean.Emp">
        <property name="dept" ref="dept"/>
    </bean>
</beans>

Clase de programa principal de Springboot:

Para que el archivo de configuración de Spring surta efecto, debe agregar la anotación @ImportResource a la clase de programa principal (o una clase de configuración).

@SpringBootApplication
@EnableConfigurationProperties({
    
    AddressProperties.class})
//让springboot程序读取原生spring配置文件
@ImportResource(locations = {
    
    "classpath:beans.xml"})
public class Springboot03ConfigApplication {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext context = SpringApplication.run(Springboot03ConfigApplication.class, args);

        Dept dept = context.getBean("dept", Dept.class);
        System.out.println(dept);

        Emp emp = context.getBean("emp", Emp.class);
        System.out.println(emp);
    }
}

inserte la descripción de la imagen aquí

4.5.2 @PropiedadFuente

Cargue y lea archivos de propiedades que no sean de Springboot.

archivo db.properties:

mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8 
mysql.username=root
mysql.password=123456

Configurar clase de enlace:

@Component
@ConfigurationProperties(prefix = "mysql")
@PropertySource(value = "classpath:db.properties")
public class MysqlProperties {
    
    

    private String username;
    private String password;
    private String driver;
    private String url;

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }

    public String getDriver() {
    
    
        return driver;
    }

    public void setDriver(String driver) {
    
    
        this.driver = driver;
    }

    public String getUrl() {
    
    
        return url;
    }

    public void setUrl(String url) {
    
    
        this.url = url;
    }
}

Leer configuración:

@Autowired
private MysqlProperties mysqlProperties;

@GetMapping("/readMysql")
public MysqlProperties readMysql(){
    
    
    return mysqlProperties;
}

4.6 Perfil

Profile es el soporte de Springboot para diferentes funciones de configuración en diferentes entornos. Puede cambiar rápidamente de entorno activando y configurando parámetros.

4.6.1 Perfiles Múltiples

Al escribir el archivo de configuración principal, el nombre del archivo puede ser aplicación-{perfil}.yml o aplicación-{perfil}.properties, y a continuación se usa yml.

El archivo de configuración principal application.yml:

spring:
  profiles:
    active: dev

Archivo de configuración del entorno de desarrollo application-dev.yml:

server:
  port: 8081

Archivo de configuración del entorno de prueba application-test.yml:

server:
  port: 8082

Archivo de configuración del entorno de producción application-prod.yml:

server:
  port: 8083

4.6.2 yml admite el modo de bloqueo de varios documentos

El archivo de configuración también admite el uso de varios bloques de documentos para crear varios entornos. ---(Tres líneas discontinuas) representan un bloque de documentos. Si no especifica iniciar otros bloques de documentos, el primer bloque de documentos se inicia de manera predeterminada.

spring:
  profiles:
    active: dev # 指定当前激活的profile

---
#开发profile
server:
  port: 8091
spring:
  profiles: dev #指定属于哪个环境

---
#测试profile
server:
  port: 8092
spring:
  profiles: test #指定属于哪个环境

---
#生产profile
server:
  port: 8093
spring:
  profiles: product  #指定属于哪个环境

Con respecto al problema obsoleto de la solicitud de perfiles de primavera: https://blog.csdn.net/huang498/article/details/123776406

4.6.3 Activar el perfil especificado

Todas las configuraciones de varios perfiles anteriores necesitan activar el perfil especificado.

4.6.3.1 Archivo de configuración

Activado en el archivo de configuración principal application.yml.

spring:
  profiles:
    active: dev

4.6.3.2 Línea de comando

Empaquete el proyecto en un paquete jar e inícielo desde la línea de comandos.

java -jar springboot03-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

4.6.3.3 Parámetros de la máquina virtual

Especifique el parámetro de opciones de VM en Configuraciones de ejecución/depuración de IDEA.

-Dspring.profiles.active=prod

Nota: -D es una redacción fija.

inserte la descripción de la imagen aquí

4.6.3.4 Parámetros de la aplicación

Especifique el parámetro de argumentos del programa en las configuraciones de ejecución/depuración de IDEA.

--spring.profiles.active=prod

inserte la descripción de la imagen aquí

4.7 Ubicación de carga del archivo de configuración

El inicio de Springboot escaneará los archivos application.properties o application.yml en las siguientes ubicaciones como el archivo de configuración predeterminado de Springboot.

  • archivo:./config/ (config en el directorio de archivos del proyecto actual)
  • archivo:./ (bajo el directorio de archivos del proyecto actual)
  • ruta de clase:/config/
  • ruta de clases:/

La prioridad es de mayor a menor, y la configuración de alta prioridad anulará la configuración de baja prioridad.

Springboot cargará el archivo de configuración principal desde las cuatro ubicaciones, y la configuración complementaria es similar a la hoja de estilo en cascada de css.

También puede spring.config.locationcambiar la ubicación predeterminada del archivo de configuración al:

spring.config.location=d:/application.properties

Después de empaquetar el proyecto, podemos usar la forma de los parámetros de la línea de comando para especificar la nueva ubicación del archivo de configuración al iniciar el proyecto; el archivo de configuración especificado y los archivos de configuración cargados por defecto trabajan juntos para formar una configuración complementaria;

java -jar springboot03-config-0.0.1-SNAPSHOT.jar --spring.config.location=d:/application.properties

4.8 Orden de carga de configuración externa

Springboot también puede cargar la configuración desde las siguientes ubicaciones. La prioridad es de baja a alta, la configuración de alta prioridad anula la configuración de baja prioridad y todas las configuraciones formarán configuraciones complementarias.

inserte la descripción de la imagen aquí

  1. Propiedades predeterminadas especificadas a través de SpringApplication.setDefaultProperties.
  2. La anotación @PropertySource en la clase de configuración @Configuration.
  3. El archivo de configuración application.properties o application.yml (sin spring.profile) dentro del paquete jar.
  4. El archivo de configuración application-{profile}.properties o application-{profile}.yml (con spring.profile) dentro del paquete jar.
  5. El archivo de configuración application.properties o application.yml (sin spring.profile) fuera del paquete jar.
  6. El archivo de configuración application-{profile}.properties o application-{profile}.yml (con spring.profile) fuera del paquete jar.
  7. RandomValuePropertySourceEl valor random.*de propiedad .
  8. Variables de entorno del sistema operativo.
  9. Propiedades del sistema Java (System. getProperties()).
  10. Propiedades JNDI de java:comp/env.
  11. Parámetros de inicialización para el objeto de contexto Servlet.
  12. Los parámetros de inicialización del objeto Servlet.
  13. Propiedades de SPRING_APPLICATION_JSON (un archivo JSON integrado en variables de entorno o propiedades del sistema).
  14. argumentos de la línea de comandos.
  15. propertiesLa propiedad bajo prueba . Se puede utilizar para @SpringBootTestanotaciones y pruebas de partes específicas de la aplicación.
  16. Notas sobre las pruebas @TestPropertySource.
  17. $HOME/.config/spring-bootLa propiedad de configuración global de devtools en el directorio cuando devtools está activo .

Archivo de configuración externo Documentación de referencia oficial

4.9 modo de depuración

El modo de depuración de Springboot es falso de forma predeterminada y se puede establecer en verdadero para permitir que Springboot genere información de informe en el modo de depuración.

Nota: La configuración debe colocarse antes del perfil tanto como sea posible;

debug: true

inserte la descripción de la imagen aquí

4.10 Lista de elementos comunes de configuración de aplicaciones

Hay muchos elementos de configuración en el archivo de configuración de Springboot, pero ¿qué elementos de configuración están disponibles para los programadores?

Referencia del documento oficial

Supongo que te gusta

Origin blog.csdn.net/ligonglanyuan/article/details/126126366
Recomendado
Clasificación