- 编写实体类
package com.llf.Pojo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Map;
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private Map<String,Object> map;
private ArrayList<Object> list;
@Autowired
private Dog dog;
public Person() {
}
public Person(String name, Integer age, Map<String, Object> map, ArrayList<Object> list, Dog dog) {
this.name = name;
this.age = age;
this.map = map;
this.list = list;
this.dog = dog;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public ArrayList<Object> getList() {
return list;
}
public void setList(ArrayList<Object> list) {
this.list = list;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", map=" + map +
", list=" + list +
", dog=" + dog +
'}';
}
}
- 编写yaml文件
person:
name: 狂神
age: 3
map: {k1: v1,k2: v2}
list:
- code
- girl
- games
dog:
name: kuangshen
age: 1
yaml语法:
- yaml使用KV键值对的形式赋值 中间用==:==隔开,属性和值之间用空格 即 属性:空格+属性值
- yaml语法有严格的层次之分,一级一级嵌套,name,age,map,list是person的属性 dog下面的name age则是dog的属性
层次分明
- 最后在实体类的类上加一个注解
@ConfigurationProperties(prefix = "xxxx") 此处是person
xxxx代表的就是yaml配置文件中你的对象的名字
这个注解的作用就是将yaml中的对象的值与实体类的值绑定
相较于之前的@Value 这个注解 我们现在只需要写一个注解就可以了
- 自定义语法
可以在yaml配置文件中 在属性值出使用el占位符表达式生成随机值
]
person:
name: ${random.uuid}
age: ${random.int(50)}
map: {k1: v1,k2: v2}
list:
- code
- girl
- games
JSR303校验
1.空值检查
注解 | 功能 |
@Null | 校验对象是否为null |
@NotNull | 校验对象是否不为null,无法查检长度为0的字符串 |
@NotEmpty | 不能为null或空 |
@NotBlank | 校验约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格 |
2.Boolean检查
注解 | 功能 |
@AssertTrue | 校验Boolean 对象是否为 true |
@AssertFalse | 校验Boolean 对象是否为 flase |
3.长度检查
注解 功能
@Length (String)长度在范围内
@Size (Array,Colleation,Map,String)长度在范围内
4.日期检查
注解 | 功能 |
@Future | 日期必须在当前日期的未来 |
@Past | 日期必须在当前日期的过去 |
5.数值检查
注解 功能
注解 | 功能 |
@Range(min=,max=) | 值在范围内 |
@Max | 验证 Number 和 String 对象是否小等于指定的值 |
@Min | 验证 Number 和 String 对象是否大等于指定的值 |
@DecimalMax | 被标注的值必须不大于约束中指定的最大值. 这个约束的参数是一个通过BigDecimal定义的最大值的字符串表示.小数存在精度 |
@DecimalMin | 被标注的值必须不小于约束中指定的最小值. 这个约束的参数是一个通过BigDecimal定义的最小值的字符串表示.小数存在精度 |
@Digits | 验证 Number 和 String 的构成是否合法 |
@Digits(integer=,fraction=) | 验证字符串是否是符合指定格式的数字,interger指定整数精度,fraction指定小数精度。 |
6.其他检查
注解 功能
注解 | 功能 |
@URL | 必须是一个URL |
@Pattern | 正则表达式 |
@Email | 必须是一个Email,或空 |
使用方法:在需要校验的类上添加@Validated注解 在需要校验的属性上添加相应的注解名
新版本需要添加依赖
<!--JRC303校验-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.17.Final</version>
</dependency>
实体类
@Component
@Validated
@ConfigurationProperties(prefix = "dog")
public class Dog {
@Value("狂神")
private String name;
@Value("3")
private String age;
@Email()
private String email;
yaml配置文件
dog:
email: 123
test测试
@Autowired
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog.toString());
}
结果
测试发现 这个功能十分鸡肋,他只会判定你的字符串中有没有@这个符号 而不会检验你的email是否有效
多运行环境切换
使用properties版本
创建不同的properties文件 文件名字用application- 加文件名.properties
在任意一个properties文件中输入
spring.profiles.active=xxx 此处的xxx就是文件-后面的文件名 就拿dev举例
那么我们现在的运行环境就是dev配置的环境
使用yaml版本
使用properties我们需要创建多个文件夹 但是使用yaml的格式 我们可以只使用一个yaml文件即可
spring:
profiles:
active: test
---
server:
port: 8081
spring:
profiles: dev
# 这里我们使用三个- 来表示文件的结束 即---下面的是一个新的文件 我们显示的定义了文件名 profiles为dev---server: port: 8082spring: profiles: test
配置文件优先级问题
在整个程序中配置文件可以在4个地方创建 他们分别是
- 主程序目录下
- 主程序的config目录下
- 类路径下
- 类路径的config目录下
它的优先级顺序是 根目录的config–>根目录—>类路径下的config—>类路径
如果在一个地方 那么按照文件的上下顺序 越靠上优先级顺序越高