SpringBoot configuration-yaml adquisición del valor del archivo de configuración

La sintaxis de YAML puede referirse a "Gramática básica del archivo YAML"

Application.properties y application.yml son archivos de configuración de SpringBoot, se encuentran en el src/main/resourcesdirectorio y se utilizan para modificar la configuración predeterminada.

1. Primero src/main/resourcescree application.yml en el directorio

~/Desktop/MySpringboot$ touch src/main/resources/application.yml

2. Agregue la siguiente información de configuración a application.yml

server:
        port: 8088
person:
        lastName: Sam
        age: 18
        boss: false
        birth: 2020/03/21
        maps: {k1: v1,k2: v2}
        lists:
                - Tom
                - Sam
        dog:
                name: small dog
                age: 2

Si el archivo application.properties se usa para la configuración, los datos anteriores son equivalentes a:

server.port=8088
person.lastName=Sam
person.age=18
person.boss=false
person.birth=2020/03/21
person.maps.k1=v1
person.maps.k2=v2
person.lists=Tom,Sam
person.dog.name=small dog
person.dog.age=2

3. Cree una clase de persona para asignar los valores de atributo en el archivo de configuración a esta clase

Person.java

package com.wong.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 将配置文件中配置的每一个属性值,映射到这个组件中
 * @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * 			prefix = "person":配置文件中哪个下面的所有属性值进行一一映射
 * 	注意:只有这个组件是容器的组件,才能使用容器提供的ConfigurationProperties功能
 */
@Configuration
@ConfigurationProperties(prefix = "person")
public class Person{
	private String lastName;
	private int age;
	private boolean boss;
	private Date birth;

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

	// 省略setter、getter方法
}

  • @ConfigurationProperties: dígale a SpringBoot que vincule todas las propiedades de esta clase a la configuración relevante en el archivo de configuración, prefijo = "persona": qué mapeo uno a uno de todos los valores de propiedad en el archivo de configuración.
  • @Configuration se usa para definir la clase de configuración. La clase anotada contiene uno o más métodos anotados con @Bean. Estos métodos serán escaneados por la clase AnnotationConfigApplicationContext o AnnotationConfigWebApplicationContext, y se usarán para construir definiciones de bean e inicializar el contenedor Spring.
  • La anotación @Bean de Spring se usa para indicar el método para generar un objeto Bean, y luego este objeto Bean se entrega a la administración de Spring. El método de generar este objeto Bean Spring solo se llamará una vez, luego este Spring colocará este objeto Bean en su propio contenedor IOC

De hecho, también podemos usar la anotación @Value para vincular el valor:

@Configuration
//@ConfigurationProperties(prefix = "person")
public class Person{
	@Value("${person.lastName}")
	private String lastName;

	@Value("${person.age}")
	private int age;
	
	@Value("${person.boss}")
	private boolean boss;
	
	@Value("${person.birth}")
	private Date birth;
	
	@Value("${person.maps}") // 失败
	private Map<String,Object> maps;
	
	@Value("${person.lists}") // 失败
	private List<Object> lists;
	
	
	@Value("${person.dog}") // 失败
	private Dog dog;

	// 省略setter、getter方法
}

Compare la diferencia entre @Value y @ConfigurationProperties:

@Propiedades de configuración @Valor
Función Inyección masiva de atributos en archivos de configuración Especificar uno por uno
Gramática floja El soporte, es decir, apellido, apellido, APELLIDO se considerará igual No compatible
juegos No compatible Soporte, ver ejemplo 1
Verificación de datos JSR303 Soporte, ver ejemplo 2 No compatible
Embalaje tipo complejo Apoyo No compatible

Por lo tanto, si hay una encapsulación de tipo complejo o se define un javaBean para asignar elementos de configuración, usamos @ConfigurationProperties. Cuando use un atributo solo, use @Value.
Ejemplo 1:

@Configuration
public class Person{
	@Value("#{10*2}")
	private int age;
	

	// 省略setter、getter方法
}

Ejemplo 2

@Configuration
@ConfigurationProperties(prefix = "person")
@Validated
public class Person{
	@mail
	private String lastName; // 必须符合邮件格式
	...
}

4. Usa la información de configuración

@RestController
@RequestMapping("world")
public class HelloWorldController{

        @Autowired
        private Person person;

        @GetMapping("hi")
        public String index(){
                return person.getLastName();
        }
}

@Autowired es una anotación que puede anotar variables, métodos y constructores de miembros de clase, lo que permite a spring completar el ensamblaje automático de beans.

5. Corre y prueba

Ejecutar:

~/Desktop/MySpringboot$ mvn spring-boot:run

Prueba en el navegador:
Inserte la descripción de la imagen aquí

6. Pruebas unitarias

Cree una clase de prueba en src / test / java / com / wong:

package com.wong;

import com.wong.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootConfigTests {

    @Autowired
    private Person person;
    @Test
    public void testPerson(){

        System.out.println(person.getLastName()+"kkkkk");
    }

}

Haga clic con el botón derecho en SpringBootConfigTests.java y haga clic en EJECUTAR 'SpringBootConfigTests' para ejecutar la clase de prueba: la
Inserte la descripción de la imagen aquíprueba pasó. Gracias por leer!

Publicado 381 artículos originales · elogiado 85 · 80,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/weixin_40763897/article/details/105088284
Recomendado
Clasificación