百度百科:
YAML是一个可读性高,用来表达数据序列化的格式。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语言。
开发的这种语言时,YAML 的意思是:“Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
server.port=8511
server:
port: 8512
yaml语法规范:
Person
和 Dog
,使用lomboklombok依赖:
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
实体类:Person
package com.zyh.pojo;
import lombok.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component //把类注册到容器中
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
public class Person {
private String name;
private int age;
}
Dog
package com.zyh.pojo;
import lombok.*;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Dog {
private String name;
private int age;
private boolean security;
private Date birthday;
private Map<String,Object> maps;
private List lists;
private Person host;
}
application.yaml
配置文件来给对象注入属性值dog:
name: 旺财
age: 3
#boolean值
security: true
#Date
birthday: 2017/9/9
#Map
maps: {k1: v1,k2: v2}
#List
lists:
- run
- jump
- sing
#自定义对象
host:
name: zyh
age: 20
@ConfigurationProperties(prefix = "dog")
中导入值。@ConfigurationProperties(prefix = "dog")
的作用:
将配置文件中配置的每一个属性的值,映射到这个组件中;
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应
package com.zyh.pojo;
import lombok.*;
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
@ConfigurationProperties(prefix = "dog")
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Dog {
private String name;
private int age;
private boolean security;
private Date birthday;
private Map<String, Object> maps;
private List lists;
private Person host;
}
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
<optional>trueoptional>
dependency>
package com.zyh;
import com.zyh.pojo.Dog;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot02YamlApplicationTests {
//注入对象
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
properties
配置文件加载属性properties
文件name=zhaoyuhang
age=23
package com.zyh.pojo;
import lombok.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Component //把类注册到容器中
@PropertySource(value = "classpath:zhaoyuhang.properties")//导入配置文件
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
public class Person {
//使用@Value读取配置文件中的属性值
@Value("${name}")
private String name;
@Value("${age}")
private int age;
}
package com.zyh;
import com.zyh.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot02YamlApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
@ConfigurationpPropertie和@Value对比
@ConfigurationpPropertie | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 只能注入单个属性 |
El表达式 | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 。
@Validated //使用JSR303校验
@NotNull(message="名字不能为空")
private String userName;
@Max(value=120,message="年龄最大不能查过120")
private int age;
@Email(message="邮箱格式错误")
private String email;
空检查
@Null 验证对象是否为null
@NotNull 验证对象是否不为null, 无法查检长度为0的字符串
@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.
@NotEmpty 检查约束元素是否为NULL或者是EMPTY.
Booelan检查
@AssertTrue 验证 Boolean 对象是否为 true
@AssertFalse 验证 Boolean 对象是否为 false
长度检查
@Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
@Length(min=, max=) string is between min and max included.
日期检查
@Past 验证 Date 和 Calendar 对象是否在当前时间之前
@Future 验证 Date 和 Calendar 对象是否在当前时间之后
@Pattern 验证 String 对象是否符合正则表达式的规则
测试:实体类中添加JSR303校验
package com.zyh.pojo;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
@Component //把类注册到容器中
@ConfigurationProperties(prefix = "person")
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
@Setter
//JSR303校验
@Validated
public class Person {
//使用@Value读取配置文件中的属性值
@Size(min = 6,max = 15)
@NotNull
private String name;
private int age;
}
测试类测试:
package com.zyh;
import com.zyh.pojo.Person;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Springboot02YamlApplicationTests {
@Autowired
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
我们在创建一个SpringBoot项目的时候,默认的配置文件是properties
格式的,但在SpringBoot中我们一般都使用yaml配置。
我们在编写配置文件的时候,文件名可以是
application.properties或application.yaml
但是我们可以在编写一些测试和开发的环境
例如:
application-dev.properties
application-test.properties
这就是使用properties
配置文件的弊端,必须手动编写多个配置文件来配置多环境开发,但如果使用yaml
配置,就无须在编写那么多的配置文件,只需要在主配置文件中使用三个中划线分开即可。
server:
port: 8081
spring:
profiles:
active: dev # 切换环境
---
server:
port: 8082
spring:
profiles: test #配置环境的名字
---
server:
port: 8083
spring:
profiles: dev