SpringBoot;yaml配置, JSR303校验
一,配置文件
springboot使用一个全局配置文件,配置文件名称是固定的
1.application.properties
语法结构:key=value
2.application.yaml
语法结构:key= 空格value
配置文件的作用:修改SpringBoot自动装配的默认值,因为springboot在底层都已经自动配置好了
二,什么是YAML
说明:k: v,对空格要求十分高
yaml不是一种语言,他是一种格式,与json差不多,它不是标记语言却具备标记语言的作用,标记语言如xml,html
对比:
yaml配置
server:
port: 8080
xml配置
server.port:8080
yaml格式配置官方推荐
三,给属性赋值的几种方式
1.实例化对象
new
2.通过@Value注入属性和@Autowired去标记对象(如果有多个对象,可通过@Qualifier("name"),去指定绑对象)
//交给spring容器托管,注册bean
@Component
public class Dog {
@Value("旺财")
private String name;
@Value("3")
private Integer age;
}
//测试
@Autowired
//如果注册多个对象(@Value)
//可通过@Qualifier("name"),去指定找对象
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
3.yaml格式给实体类赋值
port:
server: 8081
person:
name: king
age: 3
happy: false
birth: 2019/11/02
maps: {k1: v1,k2: v2}
lists:
- code
- music
- girl
dog:
name: 旺财
age: 3
@Component //加前缀,找相对应的数据 @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;
注意:@ConfigurationProperties(prefix="person")作用:给提示
三,ymal注入属性的几个特点、
1.@ConfigurationProperties,作用在类上,写一次就够了(yaml注入),@value需每个字段都要写(注解注入)
2.松散绑定:比如:,last-name跟lastName一样。-后面跟着的字母默认是大写,这就是松散绑定
3.JSR303数据校验:在字段增加一层过滤验证,可以保证数据的合法性
4.复杂类型封装,yaml可以封装对象,@value就不支持
结论:
配置yaml和我properites都能获取到值,但yaml可读性更强(强烈推荐)
如果在业务中,只需要获取配置文件中的某个值,可以使用一下@value
如果说,专门配置编写一个JavaBean来和配置文件进行映射,就直接使用.@ConfigurationProperties(yaml),绝对是不二选择
四,JSR303校验
@Validated,作用在类上,数据校验,springboot的注解
下面的就是在@Validated的注解下作用的注解,作用在字段上
如果数据异常则会统一抛出异常,方便异常中心统一处理
废话不多说上例子,这是将name字段限定成email格式,如果不是就抛异常
下面是一些常见的数据集校验注解