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/resources
directorio y se utilizan para modificar la configuración predeterminada.
1. Primero src/main/resources
cree 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:
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
prueba pasó. Gracias por leer!