Springboot—学习过程—Springboot中yaml语法讲解
1.SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
application.properties语法结构
:key=valueapplication.yml语法结构
:key:空格 value
2.yaml基础语法
说明:语法要求严格!
- 空格不能省略
- 以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
- 属性和值的大小写都是十分敏感的。
例:
例: 存对象,注意缩进server: prot: 8080
例: 存对象,行内写法student: name: qinjiang age: 3
student: {name: qinjiang,age: 3}
3.yaml可以直接给实体类赋值
例:
-
写一个复杂一点的实体类:Person 类
@Component //注册bean到容器中 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; //有参无参构造、get、set方法、toString()方法 }
-
使用yaml配置的方式进行注入
person: name: qinjiang age: 3 happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺财 age: 1
-
刚才已经把person这个对象的所有值都写好了,现在来注入到我们的类中
/* @ConfigurationProperties作用: 将配置文件中配置的每一个属性的值,映射到这个组件中; 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定 参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应(绑定) */ @Component //注册bean @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; }
@SpringBootTest class DemoApplicationTests { @Autowired Person person; //将person自动注入进来 @Test public void contextLoads() { System.out.println(person); //打印person信息 } }
测试结果:
4.加载指定的配置文件
@PropertySource
:加载指定的配置文件,会和value(可以获取配置文件中的值)
一起使用;@configurationProperties
:默认从全局配置文件中获取值;- 在
resources
目录下新建一个person.properties
文件name=kuangshen
- 在代码中指定加载
person.properties
文件@PropertySource(value = "classpath:person.properties") @Component //注册bean public class Person { @Value("${name}") private String name; ...... }
- 输出结果
5.对比小结
-
@Value
这个使用起来并不友好!我们需要为每个属性单独注解赋值,比较麻烦;我们来看个功能对比图
-
@ConfigurationProperties
只需要写一次即可 ,@Value
则需要每个字段都添加 -
松散绑定:这个什么意思呢? 比如我的
yml
中写的last-name
,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下 -
JSR303
数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性 -
复杂类型封装,
yml
中可以封装对象 , 使用value
就不支持
6.结论:
-
配置
yml
和配置properties
都可以获取到值 , 强烈推荐yml
; -
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下
@value
; -
如果说,我们专门编写了一个
JavaBean
来和配置文件进行一一映射,就直接@configurationProperties
,不要犹豫!
7.JSR303数据校验
Springboot
中可以用@validated
来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。@Component //注册bean @ConfigurationProperties(prefix = "person") @Validated //数据校验 public class Person { @Email(message="邮箱格式错误") //name必须是邮箱格式 private String name; }
8.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 对象是否符合正则表达式的规则
.......等等
除此以外,我们还可以自定义一些数据校验规则