2. SpringBoot 配置
2.1 配置文件类型
- 配置文件用于修改 SpringBoot 的默认配置。
2.1.1 properties 文件
-
**properties ** 是属性文件后缀。
-
文件名:application.properties
-
只能保存键值对。
-
基础语法:key=value
name=why
-
注入配置类
@Component // 声明为 Spring 组件 @PropertySource(value = "classpath:config.properties") public class Person {@Value("${name}")private String name; }
需要在 IDEA 的 settings --> FileEncodings 中设置编码格式为 UTF-8。
2.1.2 yaml 文件
-
yaml 是一个可读性高,用来表达数据序列化的格式。
-
文件名:application.yml 或 application.yaml
-
能保存键值对、对象和表达式。
-
基础语法:key: 空格 value
# 键值对 name: why# 对象 student:name: whyage: 20student: {name: why,age: 20}# 数组 pets: - cat- dog- pigpets: [cat,dog,pig]# 表达式 dog:name: ${siri:siri}_旺财
-
注入配置类
-
导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional> </dependency>
-
映射到类
@Component // 声明为 Spring 组件 @ConfigurationProperties(prefix = "person") // 映射配置文件的值到组件 public class Person {...}
-
2.1.3 配置注入比较
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 指定注入配置文件中的属性 |
松散绑定 | √ | × |
SpEL | √ | √ |
JSR303 数据校验 | √ | × |
复杂类型封装 | √ | × |
(1) 松散绑定
-
yaml 文件中的 dog-name 可以为类中的 dogName 赋值
dog:dog-name: 富贵dog-age: 3
@Component @ConfigurationProperties(value = "dog") public class Dog {private String dogName;private Integer dogAge; }
(2) JSR303数据校验
● 检查属性的数据格式。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
person:email: 123456
@Component // 声明为 Spring 组件
@Validated // 数据格式校验
@ConfigurationProperties(prefix = "person") // 映射配置文件的值到组件
public class Person {@Email(message = "邮箱格式错误")private String email;
}
检查结果:default message [邮箱格式错误];
● 数据格式检查常用注解
Maven:jakarta.validation:jakarta.validation-api:2.0.2
注解 | 作用类型 | 解释 |
---|---|---|
@NotNull | 任何类型 | 属性不能为null |
@NotEmpty | 集合 | 集合不能为null,且size大于0 |
@NotBlanck | 字符串、字符 | 字符类不能为null,且去掉空格之后长度大于0 |
@AssertTrue | Boolean、boolean | 布尔属性必须是true |
@Min | 数字类型(原子和包装) | 限定数字的最小值(整型) |
@Max | 同@Min | 限定数字的最大值(整型) |
@DecimalMin | 同@Min | 限定数字的最小值(字符串,可以是小数) |
@DecimalMax | 同@Min | 限定数字的最大值(字符串,可以是小数) |
@Range | 数字类型(原子和包装) | 限定数字范围(长整型) |
@Length | 字符串 | 限定字符串长度 |
@Size | 集合 | 限定集合大小 |
@Past | 时间、日期 | 必须是一个过去的时间或日期 |
@Future | 时期、时间 | 必须是一个未来的时间或日期 |
字符串 | 必须是一个邮箱格式 | |
@Pattern | 字符串、字符 | 正则匹配字符串 |
2.2 配置文件路径
2.2.1 路径优先级
-
优先级从高到低排序
-
file
为项目目录,classpath
为资源目录,即resources
(1)
file:./config/
(2)
file:./
(3)
classpath:/config/
(4)
classpath:/
-
2.2.2 多环境配置
- 整合线上、测试或者其他用途的环境配置。
properties 文件
-
application.properties
spring.profiles.active=test
-
application-test.properties
server.port=8081
-
application-dev.properties
server.port=8082
yaml 文件
-
application.yml
server:port: 8080 spring:profiles: test --- server:port: 8081 spring:profiles: test --- server:port: 8082 spring:profiles: dev
2.3 配置文件内容
- 配置文件中的内容都基于
xxxAutoConfiguration
绑定并装配的xxxProperties
类。- 开发者编写配置文件,给
xxxProperties
类属性赋值。 xxxAutoConfiguration
使用xxxProperties
类属性修改配置默认值。
- 开发者编写配置文件,给
- 配置文件 -->
xxxProperties
-->xxxAutoConfiguration
--> 修改配置默认值
2.4 总结
-
SpringBoot 启动会加载大量自动配置类,
-
检查 SpringBoot 默认的自动配置类中是否含有所需配置组件,若没有则需手动添加。
-
手动添加组件时,SpringBoot 从 Properties 类中获取某些属性,在配置文件中指定这些属性的值即可实现自动装配。
-
xxxAuotoConfiguration:自动配置类;
xxxProperties:封装配置文件的相关属性;
xxx.yml:为属性赋值,完成配置。
-
debug: ture
:日志打印配置。