Springboot(三)——yaml语法、JSR303数据校验、多环境切换
作者:互联网
配置文件
SpringBoot使用一个全局的配置文件 , 配置文件名称是固定的
第一种、application.properties
- 语法结构 :key=value
第二种、application.yml
- 语法结构 :key:空格 value
配置文件的作用:修改SpringBoot自动配置的默认值,因为SpringBoot在底层都给我们自动配置好了;
yaml
YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)
以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yaml和xml
传统xml配置:
<server>
<port>8080<port>
</server>
yaml配置:
server:
prot: 8080
yaml基础语法
说明:语法要求严格!
1、空格不能省略
2、以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
3、属性和值的大小写都是十分敏感的。
字面量:普通的值 [ 数字,布尔值,字符串 ]
字面量直接写在后面就可以 , 字符串默认不用加上双引号或者单引号;
key: value
一、yaml
-
“ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思;
比如 :name: "study \n yaml" 输出 :sutdy 换行 yaml -
'' 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出
比如 :name: ‘study \n yaml’ 输出 :study \n yaml
#key: value
#普通的key: value
name: studyYAML
#对象
student:
name: zhangsan
age: 3
#行内写法
Student: {name: zhangsan,age: 3}
#数组
pets:
- cat
- dog
- pig
#行内写法
Pets: {cat,dog,pig}
二、properties
name=studyYAML
student.name=zhangsan
student.age=3
yaml给属性赋值?
一、新建一个springboot项目,项目名称【springboot-02-config】
二、新建pojo包编写Dog和Person实体类
1、Dog:
package com.kuang.pojo;
import org.springframework.stereotype.Component;
@Component//注册bean到容器中
public class Dog {
private String name;
private Integer age;
//有参无参构造、get、set方法、toString()方法
}
2、Person:
package com.kuang.pojo;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@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()方法
}
三、我们原来是如何给bean注入属性值的!@Value,给狗狗类测试一下:
@Component //注册bean
public class Dog {
@Value("旺财")
private String name;
@Value("18")
private Integer age;
}
四、在SpringBoot的测试类下注入Dog输出一下;
@SpringBootTest
class Springboot02ConfigApplicationTests {
@Autowired //将Dog自动注入进来
private Dog dog;
@Test
void contextLoads() {
System.out.println(dog);
}
}
运行结果输出成功!
这是原生的方式,特别麻烦,下面我们用YAML方式注入(先删除Dog里面的@value注解)
五、在resources文件下新建一个application.yaml文件,给Person赋值
person: #对应实体类的名字
name: 张三
age: 19
#Boolean
happy: true
#Date
birth: 2021/6/28
#集合
maps: {key1: value1, key2: value2}
#数组
lists:
- code
- music
- girl
#对象
dog:
name: 旺财
age: 3
六、在Person类中配置@ConfigurationProperties(prefix = "person")注解
可以在pom.xml中添加以下配置文件依赖即可解决
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
七、修改测试类
@SpringBootTest
class Springboot02ConfigApplicationTests {
@Autowired //将Person自动注入进来
private Person person;
@Test
void contextLoads() {
System.out.println(person);
}
}
八、运行测试,输出结果
yaml高级玩法
person:
name: 张三${random.uuid} #赋值随机uuid
age: ${random.int} #赋值随机整形
#Boolean
happy: true
#Date
birth: 2021/6/28
#集合
maps: {key1: value1, key2: value2}
#数组
lists:
- code
- music
- girl
#对象
dog:
name: ${person.hello:hello}_旺财 #假设person。hello不存在,赋值hello给旺财,假设存在,赋值已有的值给旺财
age: 3
输出结果
@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
private String firstName;
private Integer age;
名字不一致问题
dog:
first-name: 小毛
age: 2
运行测试:
结论:
- 配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
- 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
- 如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!
JSR303数据校验
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。我们这里来写个注解让我们的name只能支持Email格式;
@Component //注册bean
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
public class Person {
@Email(message="邮箱格式错误") //标注name的值必须是邮箱格式
private String name;
}
常用参数
@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 对象是否符合正则表达式的规则
多环境切换
properties多环境切换
一、新建application-dev.properties文件(开发环境)
server.port=8082
二、新建application-test.properties文件(测试环境)
server.port=8081
三、修改主配置文件application.properties
#springboot的多环境配置:可以选择激活指定的配置文件
spring.profiles.active=dev
四、运行测试
启动了开发环境下的8082端口
yaml多环境切换,删除properties文件
一、修改application.yaml文件
server:
port: 8081
spring:
profiles:
active: test #指定test的环境
---
server:
port: 8082
spring:
profiles: dev #环境名称
---
server:
port: 8083
spring:
profiles: test
二、运行测试
标签:name,配置文件,JSR303,age,Dog,private,yaml,Springboot 来源: https://www.cnblogs.com/mengbingpeng1010/p/15042085.html