SpringBoot
Posted jiaxing-java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot相关的知识,希望对你有一定的参考价值。
yaml语法
# key: value
# 对空格的要求十分高
# 普通的key-value:key=value
# 注入到我们的配置类中
name: qinjiang
# 对象(包含两个属性)
student:
name: qinjiang
age: 3
# 三个对象
student:
name: qinjiang
age: 3
# student对象下的name属性下的age属性
student:
name: qinjiang
age: 3
# 行内写法:对象(包含两个属性)
student: name: qinjiang,age: 3
# 数组
pets:
- cat
- dog
- pig
# 行内写法:数组
pets: [cat,dog,pig]
yaml可以直接给实体类赋值
原来用Spring的方式
-
创建实体类,使用@Value注解来赋值
@Component public class Dog @Value("旺财") private String name; @Value("3") private int age; public Dog() public Dog(String name, int age) this.name = name; this.age = age; @Override public String toString() return "Dog" + "name=\'" + name + \'\\\'\' + ", age=" + age + \'\'; public String getName() return name; public void setName(String name) this.name = name; public int getAge() return age; public void setAge(int age) this.age = age;
-
测试类
@SpringBootTest class Springboot02ConfigApplicationTests @Autowired private Dog dog; @Test void contextLoads() System.out.println(dog);
使用yaml赋值
-
在resources文件夹中新建yaml配置文件
person: name: qinjiang age: 3 happy: false birth: 2023/3/21 maps: k1: v1 k2: v2 lists: [sing,jump,rap] dog: name: 旺财 age: 3
-
实体类
@Component @ConfigurationProperties(prefix = "person") // 这里注意要与配置文件中的对象名一致 public class Person // 有参、无参构造器,Getter、Setter、toString方法
这里使用的是实体类来举例,今后的配置类可以通过这种方法来进行赋值
使用properties文件赋值(个人感觉不如yaml配置好用)
-
在resources文件夹中新建properties配置文件
name=kuangshen
-
配置实体类
@Component @PropertySource(value = "classpath:qinjiang.properties") // 绑定配置文件名称 public class Person // SPEL表达式取出配置文件的值 @Value("$name") private String name; ...
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- @ConfigurationProperties只需要写一次即可,@Value则需要每个字段都添加
- 可以看到,yaml配置文件中的命名为
first-name
,实体类中的命名为firstName
,-后面跟着的字母默认是大写的。这就是松散绑定。 - JSR303校验,就是我们可以在字段上增加一层过滤器验证,可以保证数据的合法性
- 复杂类型封装,yaml可以封装对象,使用@Value就不支持
松散绑定
-
配置yaml文件
dog: first-name: 阿黄 age: 3
-
配置实体类
@Component @ConfigurationProperties(prefix = "dog") public class Dog private String firstName; private int age; ...
结论:
- 配置yaml和配置properties都可以获取到值,强烈推荐yaml
- 如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下@Value
- 如果说,我们专门编写了一个JavaBean来喝配置文件进行映射,就直接使用@ConfigurationProperties,不要犹豫!
JSR303数据校验
- JSR303校验,就是我们可以在字段上增加一层过滤器验证,可以保证数据的合法性
-
pom文件导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-validation --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.7.9</version> </dependency>
-
配置实体类
@Component @ConfigurationProperties(prefix = "person") @Validated // 数据校验开启 public class Person @Email // @Eamil(message = "邮箱格式错误") 此处为设置提示消息,可自定义 private String name; ...
-
测试输出
被注释的元素必须是一个数字,其值必须大于等于指定的最小值
Constraint | 详细信息 |
---|---|
@Null | 被注释的元素必须为null |
@NotNull | 被注释的元素必须不为null |
@AssertTrue | 被注释的元素必须为true |
@AssertFalse | 被注释的元素必须为false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素须必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max,min) | 被注释的元素的大小必须在指定的范围内 |
@Digits(integer,fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
被注释的元素必须是电子邮箱地址 | |
@Length | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串必须非空 |
@Range | 被注释的元素必须在合适的范围内 |
以上是关于SpringBoot的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot入门到精通-SpringBoot自定义starter
最全面的SpringBoot教程——SpringBoot概述