https://zhuanlan.zhihu.com/p/537590504
application
properties
yml
yaml
properties
> yml
> yaml
假设配置文件 application.yml
内容如下
library: ZeroLibrary
borrower:
name: cc01cc
limit: 5
book:
- ZeroBook
- OneBook
// Value 中的值需要和配置文件的键一致
// 变量名的选取和配置文件直接关系
@Value("$(library)")
public String library; // library = "ZeroLibrary"
@Value("$(borrower.name")
public String borrowerName; // borrowerName = "cc01cc"
@Value("$(book[0]")
public String zeroBook; // zeroBook = "ZeroBook"
*不利于获取大量的值
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]");
*配置和类绑定
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>
创建对象类 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;
}
原因:不同场景(开发,测试,生产)使用的配置文件不同,如:数据库地址,服务器端口等,每次打包修改配置文件会相对繁琐
resources
│
├─ application.properties // 默认配置文件
│
├─ application-dev.properties // 添加后缀,自定义配置文件(开发环境,常用dev)
│
├─ application-test.properties // test 常用于测试环境
│
└─ application-pro.properties // pro 常用于生产环境
使用 ---
分隔配置文件
并使用 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
---
使用 spring.profiles.active
激活配置文件
示例
# 在默认配置文件 application 中使用
spring.profiles.active=dev
虚拟机参数(VM options)添加 -Dspring.profiles.active=dev
-D
开头,后接参数和值命令行参数(Program arguments)添加 --spring.profiles.active=dev
--
开头,后接参数和值示例
java -jar xxx.jar --spring.profiles.active=dev
依次从以下位置加载配置文件(由上往下,优先级由高到低)
file: ./config/ 当前项目的 /config 目录下
file: ./ 当前项目的根目录下
classpath:/config/ classpath 的 /config 目录下
classpath:/ classpath 的根目录下
resources
和 java
目录都会打包入 classpath
根目录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
配置文件(优先级高于包内配置文件)