springboot在底层已经自动配置了很多东西,但有些东西我们是不需要或者需要改的,比如数据源
springboot提供一个全局的配置文件,供我们修改他的默认值
这个全局文件名称固定,但可以使用两种格式:application.yaml,application.properties
两种格式的语法:
application.properties
语法结构 :key=value
application.yml
语法结构 :key:空格 value
官网强烈推荐yaml格式
何为yaml?
yaml是以数据作为中心的,一种记录数据的标记语言
yaml的基础语法:声明:语法要求严格!
1,基本数据类型及string K: V形式
value的值可以直接写, 字符串默认不用加上双引号或者单引号;
name: 黄易安
age: 27
注意:
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: "kuang \n shen" 输出 :kuang 换行 shen
‘‘ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen
2,map类型的
maps: {k1: v1,k2: v2}
#或者
maps:
k1: v1
k2: v2
3,数组类型的
list:
- code
- music
- girl
#或者
list:[code,music,girl]
4,对象类型,类名及其属性
dog:
name: 旺财
age: 3
yaml文件可以直接向实体类注入值:使用注解@ConfigurationProperties ,后面跟的"people"即下面的yaml文件的k值
对应实体类创建:
@Component
@Data
@ConfigurationProperties("people")
public class people {
private String name;
private Integer age;
private Dog dog;
private boolean happy;
private Date birth;
private Map<Object,Object> maps;
private List<Object> list;
}
对应yaml:
people:
name: 黄易安
age: 27
dog:
name: 旺财
age: 3
happy: true
birth: 2021/09/07
maps: {k1: v1,k2: v2}
list:
- code
- music
- girl
当使用properties时,也可以导入值,但比较麻烦,方法如下:
使用注解:@PropertySource(value =
@PropertySource(value = "classpath:person.properties")
@Component
public class Person {
@Value("${name}")
private String name;
......
}
这种方法需要一个一个匹配,不能像yaml一样,全部匹配~
yaml可以使用spring表达式,如下,当然了@value也可以使用
person:
name: qinjiang${random.uuid} # 随机uuid
age: ${random.int} # 随机int
happy: false
birth: 2000/01/01
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:other}_旺财
age: 1
两者对比:
1,configurationproperties可以自己匹配,但当K值和pojo类的属性不一致时,pojo的类属性值会为null
2,松散绑定,驼峰转换,pojo类里 userName,yaml里 user-name ,会自动转换,匹配成功
3,spel,即${}
4, 303校验,可以在类上使用@Validated开启校验,并通过对应例如,邮箱格式检查@Email在属性注解,进行校验,如下:
@Component
@Validated
@ConfigurationProperties("people")
public class people {
@Email
private String name;
private Integer age;
private Dog dog;
private boolean happy;
private Date birth;
private Map<Object,Object> maps;
private List<Object> list;
}
结果如下:
各种检查的注解如下:
@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 对象是否符合正则表达式的规则
.......等等
除此以外,我们还可以自定义一些数据校验规则
原文:https://www.cnblogs.com/carry-huang/p/15240722.html