SpringBoot yaml语法详解
- 1.yaml基本语法
- 2.yaml给属性赋值
- 3.JSR303校验
- 4.SpringBoot的多环境配置
1.yaml基本语法
通常情况下,Spring Boot 在启动时会将 resources 目录下的 application.properties
或 apllication.yaml
作为其默认配置文件,我们可以在该配置文件中对项目进行配置,但这并不意味着 Spring Boot 项目中只能存在一个 application.properties
或 application.yaml
我们可以存储普通的键值对:
# 普通的 key - value 对(注意键:的后面要有一个空格,这是语法规定!)
name: dahe
也可以灵活的存储对象:
# 对象
student:
name: wangwei
age: 3
# 对象的行内写法
student1: { name: qiqi,age: 18 }
可以使用数组:
# 数组
pets:
- cat
- dog
- pig
pets2: [ cat,dog,pig ]
yaml对缩进的要求十分严格,这点类似与Python语言
2.yaml给属性赋值
现在我们有两个实体类:(Dog和Person)
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Dog {
private String name;
private int age;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
public class Person {
private String name;
private int age;
private Date birth;
private boolean isHappy;
private Map<String, Object> maps;
private List<Object> lists;
private Dog dog;
}
可以使用yaml对属性直接进行赋值操作:
person:
name: dahe
age: 18
isHappy: false
birth: 2020/10/10
maps: { k1:v1,k2:v2 }
lists:
- Java
- Go
dog:
name: 汤圆
age: 1
接着,在Person pojo类中加入如下的注解:
@ConfigurationProperties(prefix = "person")
现在,使用测试类来测试一下吧:
@SpringBootTest
class TestBootApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
// Person(name=dahe, age=18, birth=Sat Oct 10 00:00:00 CST 2020, isHappy=false, maps={k1v1=, k2v2=}, lists=[Java, Go], dog=Dog(name=汤圆, age=1))
}
}
3.JSR303校验
我们在使用yaml给属性进行赋值的时候,可以加入JSR303校验,达到校验数据的目的
例如:(现在我们想让name值必须为邮箱格式)
首先,引入数据校验的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
随后,在pojo类上面加入如下的注解:
@Validated
在对应的name属性上面添加注解:
@Email()
随后如果不以邮箱格式赋值name,将会报错!
Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'person' to com.klza.pojo.Person failed:
Property: person.name
Value: "dahe"
Origin: class path resource [application.yaml] - 2:9
Reason: 不是一个合法的电子邮件地址
JSR303校验其他的注解:
4.SpringBoot的多环境配置
在真实的开发中,我们的项目可能存在多个运行环境的选择问题
yaml配置文件为此提供了便利性!
例如:现在我们有两套运行环境
application-test.yaml:
server:
port: 8081
application-dev.yaml:
server:
port: 8082
在主yaml配置文件中指定我们需要运行的环境:
spring:
profiles:
active: test
启动项目,在8081端口打开了:
现在想要切换dev环境,这很简单,将主yaml配置文件改为如下即可:
spring:
profiles:
active: dev
但是,这样会造成文件的冗余,程序员不甘于此!事实上yaml支持多文件配置在同一个配置文件中的,但是不推荐这样使用