- 默认配置文件名称: application
- 常用后缀:properties yml yaml
- 优先级: properties > yml > yaml
1. Spring Boot 读取配置文件
假设配置文件 application.yml
内容如下
library: ZeroLibrary
borrower:
name: cc01cc
limit: 5
book:
- ZeroBook
- OneBook
1.1. 使用 @Value 读取配置
// Value 中的值需要和配置文件的键一致
// 变量名的选取和配置文件直接关系
@Value("$(library)")
public String library; // library = "ZeroLibrary"
@Value("$(borrower.name")
public String borrowerName; // borrowerName = "cc01cc"
@Value("$(book[0]")
public String zeroBook; // zeroBook = "ZeroBook"
*不利于获取大量的值
1.2. 使用 Environment 读取配置
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
@Autowired
private Environment env;
String library = env.getProperty("library");
String borrowerName = env.getProperty("borrow.name");
String zeroBook = env.getProperty("book[0]");
1.3. 使用 @ConfigurationProperties 读取配置
*配置和类绑定
1.3.1. 添加依赖
Configuration Metadata: https://docs.spring.io/spring-boot/docs/2.7.1/reference/html/configuration-metadata.html#appendix.configuration-metadata.annotation-processor
<!-- 在写配置文件的时候提供提示 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.3.2. 代码示例
创建对象类 Borrower
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
// 前缀用于指定下方变量所对应键的层级归属
@ConfigurationProperties(prefix = "borrower")
public class Borrower {
// 变量名需要和配置文件中的键一致
// 类名和配置文件中的键无直接关系
private String name;
private int limit;
}
2. Spring Boot 动态切换配置
原因:不同场景(开发,测试,生产)使用的配置文件不同,如:数据库地址,服务器端口等,每次打包修改配置文件会相对繁琐
2.1. 配置文件
2.1.1. 使用多个配置文件的方式
resources
│
├─ application.properties // 默认配置文件
│
├─ application-dev.properties // 添加后缀,自定义配置文件(开发环境,常用dev)
│
├─ application-test.properties // test 常用于测试环境
│
└─ application-pro.properties // pro 常用于生产环境
2.1.2. 使用单个 yml 文件(properties 文件不适用)
使用 ---
分隔配置文件
并使用 spring.config.activate.on-profile
指定每个配置文件(2.4 版本之前是 spring.profiles)
示例
---
server:
port: 8081
spring:
config:
activate:
on-profile: dev
---
server:
port: 8082
spring:
config:
activate:
on-profile: test
---
2.2. 激活配置文件
2.2.1. 使用配置文件激活
使用 spring.profiles.active
激活配置文件
示例
# 在默认配置文件 application 中使用
spring.profiles.active=dev
2.2.2. 使用虚拟机参数激活
虚拟机参数(VM options)添加 -Dspring.profiles.active=dev
-D
开头,后接参数和值- 会覆盖配置文件参数
2.2.3. 使用命令行参数激活
命令行参数(Program arguments)添加 --spring.profiles.active=dev
--
开头,后接参数和值- 会覆盖配置文件参数
示例
java -jar xxx.jar --spring.profiles.active=dev
3. 内部配置文件的加载顺序
依次从以下位置加载配置文件(由上往下,优先级由高到低)
1. file: ./config/ 当前项目的 /config 目录下
2. file: ./ 当前项目的根目录下
3. classpath:/config/ classpath 的 /config 目录下
4. classpath:/ classpath 的根目录下
- Maven 中
resources
和java
目录都会打包入classpath
根目录 - 项目根目录的文件默认不会被打包
4. 常用外部配置文件的加载
Spring Boot Reference Documentation - features.external-config: https://docs.spring.io/spring-boot/docs/2.7.1/reference/htmlsingle/#features.external-config
- 使用
spring.config.loaction
参数加载外部配置文件 - 在打包后的
jar 包
的同级目录放application.properties
或/config/application.properties
配置文件(优先级高于包内配置文件)
5. 参考
- 黑马程序员SpringBoot教程_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Lq4y1J77x
- 本文系个人学习总结,和实际如有出入,欢迎指正
- 若有更好的思路或者排版,欢迎建议
- 署名:cc01cc: https://github.com/cc01cc
- 创建于:2022年7月4日
- 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可
- 欢迎大家转载分享,转载请标明源地址,谢谢