Spring官方文档:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html (这里和老师一起看的2.1.6的,但是实际项目用的最新的2.6.6)
1、yaml文件格式
# yaml文件对空格要求十分严格,没有空格可能就报错 # yaml文件可以注入到配置类中 # 普通的key-value name: wcy # 对象 student1: name: wcy age: 24 # 对象行内写法 student2: {name: wcy,age: 3} # 数组 pet1: - cat - dog - pig # 数组行内写法 pet2: [cat,dog,pig] server: port: 8080
2、yaml文件注入配置类
首先看没有yaml是怎么配置属性的
Dog类
package com.wcy.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component @Data @AllArgsConstructor @NoArgsConstructor public class Dog { @Value("旺财") private String name; @Value("3") private Integer age; }
测试类
package com.wcy; import com.wcy.pojo.Dog; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class Springboot01ConfigApplicationTests { @Autowired private Dog dog; @Test void contextLoads() { System.out.println(dog); } }
有了yaml之后呢?
application.yaml
person: name: wcy age: 3 happy: false birth: 2022/4/09 maps: {k1: v1,k2: v2} lists: - code - music - girl dog: name: 旺财 age: 3
Person类,@ConfigurationProperties(prefix = "person") 通过这个注解和yaml配置文件参数一一绑定
package com.wcy.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; @Component @Data @AllArgsConstructor @NoArgsConstructor @ConfigurationProperties(prefix = "person") public class Person { private String name; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
这个注解会报红(不影响使用),按找提示加依赖就好了
编译器弹出提示:
3、yaml格式的优势
* 松散绑定:yaml配置文件中和配置类中的属性不一定要完全一致,例如first-name和firstName也是可以复赋值的,比较智能 * SpEl就是 ${properties配置文件中属性名},这个yaml也用不上 * JSR303简单的来说就是通过注解规定属性的格式,如果实际值不符合会报错,如下图
Person类—JSR303数据校验
@Component @Data @AllArgsConstructor @NoArgsConstructor @ConfigurationProperties(prefix = "person") @Validated // 数据校验 public class Person { private String name; @Email private String email; private Integer age; private Boolean happy; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; }
4、多配置文件
当有多个配置文件需要切换的时候,可以使用下面这样的方法
applicationcontext.yaml:
spring: profiles: active: test --- dog: name: 旺财 spring: profiles: dev --- dog: name: 富贵 spring: profiles: test
console:
Dog(name=富贵)
也可以使用不同的yaml文件,applicationcontext-test.yaml这样命名就可以了,具体参考官方文档;
https://docs.spring.io/spring-boot/docs/2.6.6/reference/htmlsingle/#features.external-config.files.multi-document