目录
yaml语法
语法结构:key:空格 value
- 空格不能省略
- 以缩进来控制层级关系
- 属性和值的大小写都是十分敏感的
文件后缀是.yml
示例:
server:
port: 8080
各种赋值方法
person:
# 普通类型的赋值
name: tom
# map集合的赋值
maps: {key1: value1,key2: value2}
# 数组赋值
lists:
- A
- B
- C
# 引用对象的赋值
dog:
name: dog
age: 321
# 引用对象赋值的行内写法
dog: {name: tom,age: 1234}
# 数组赋值行内写法
lists: [A,B,D]
注意:
双引号会转义特殊字符,例如'\n'等等
注入配置文件
在springboot项目中的resources目录下新建一个文件 application.yml
创建两个实体类
dog类
@Setter @Getter @ToString @Component @ConfigurationProperties(prefix = "dog")
public class dog {
private String name;
private Integer age;
}
person类
@Setter @Getter @ToString @Component @ConfigurationProperties(prefix = "person")
public class person {
// 普通数据
private String name;
// map集合
private Map<String,Object> maps;
// list(数组)集合
private List<Object> lists;
// 引用类型数据
private dog dog;
}
@Component:注明该类是spring的一个组件,将其放入ioc容器中
@ConfigurationProperties(prefix=" "):默认从全局配置中获取数据(从application.yml中获取数据),prefix属性就是配置文件中的key
进行测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
private person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
扩展
解决使用 @ConfigurationProperties注解爆红,添加依赖即可
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
占位符的使用
dog:
name: ${random.uuid}
age: ${random.int}
依次是获取uuid、获取随机整数
使用指定的properties文件进行注入
创建文件A.properties
编写实体类
@Setter @Getter @ToString @Component @PropertySource("classpath:A.properties")
public class pro {
@Value("${name}")
private String name;
}
@PropertySource:加载指定的配置文件
@Value:注入数据(可以使用el表达式)
两种注解的对比
@ConfigurationProperties | @Value | |
功能 | 可以批量注入配置文件中的属性 | 必须一个个指定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
松散绑定
在yml中写的是last-name,而实体类写的是lastName 这个是可以实现数据绑定的
JSR303数据校验
SpringBoot 是使用@Validated来实现数据校验的,数据异常则会统一抛出,交由异常中心处理
使用是需要添加依赖(启动器依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
常见的参数
@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 对象是否符合正则表达式的规则
示例:
@Setter @Getter @ToString @Component @ConfigurationProperties(prefix = "dog")
@Validated
public class dog {
@Email(message = "邮箱格式错误")
private String name;
private Integer age;
}
运行结果:注入的name值并不是email格式