文章目录
Spring Boot 配置文件
-
Spring Boot 的配置文件分为
properties
与yaml
两种形式且必须命名为application
。 -
Spring Boot 的配置文件通常放置于
src/main/resources
文件夹下。
properties
与 yaml
简单对比:
properties | yaml | |
---|---|---|
语法结构 | key=value | key: value(注意冒号后面需要空格) |
文件后缀名 | .properties |
.yaml 或.yml
|
级联属性 | #用点连接 server.port=9090 |
# 分层 server: port: 9090 |
一、yaml 语法
1.1 基本语法
# 注释文本
[key]:[空格][value]
# 使用缩进表示层级关系,同层级必须左对齐,缩进空格数不重要,一般使用两个空格
[key1]:
[空格][空格][key2]:[空格][value]
- 大小写敏感。
- 数据值前面必须有一个空格作为分隔符。
- 使用缩进表示层级关系,同层级的元素必须左侧对齐。
-
#
开头表示注释。
spring:
redis:
host: localhost
port: 6379
1.2 值类型
1.2.1 字面量(数字、字符串、布尔)
可以直接书写,不需要加引号,如下:
student:
name: Jacks
age: 20
man: true
- 字符串默认情况不用加引号,单引号与双引号包裹的字符串含义不同
- 单引号(‘字符串’):忽略转义字符。
- 双引号(“字符串”):识别转义字符。
1.2.2 对象或Map
# 写法一
student:
name: Jacks
age: 20
man: true
# 写法二
student: {name: Jacks, age: 20}
1.2.3 数组
# 写法一
fruit:
- apple
- orange
- banana
# 写法二
fruit: [apple,orange,banana]
- 用
- 值
的形式表示数组中的一个元素。 - 用
[]
包裹且用,
隔开每一个元素。
1.2.4 复合值
- 复合结构是前三种形式的组合。
yaml:
value:
# 字面量写法
str: 字符串,默认不\n需要加引号,不会转义特殊字符。
str2: '单引号包裹的字符串不识别转义字符\n,与不加引号效果一样'
str3: "双引号包裹的字符串会识别转义字符\n"
num: 666
dNum: 666.88
birth: 2020/10/27 12:23:34
# 集合写法 array、list、set 写法,两种方式都可以
list:
- hello
- world
- 你好
- 世界
set: [ hello,world,你好,世界 ]
# 对象/map
map: { name: jacks,age: 22,gender: man}
# 对象数组
students:
- {name: 张三, age: 18}
- {name: 李四, age: 19}
1.2.5 参数引用
age: 20
# 可以使用 ${} 引用配置文件中的其他项的值
student:
age: ${age}
二、配置文件属性读取
- 配置文件
student:
name: 张三
age: 20
address:
- 北京
- 上海
- 深圳
- 广州
2.1 使用 @Value
读取
@RestController
public class YmlController {
// 获取属性值,${}中匹配配置文件中的 key
@Value("${student.name}")
private String username;
@Value("${student.age}")
private int age;
// 获取数组
@Value("${address[0]}")
private String address;
@GetMapping("hello")
public String hello() {
System.out.println(username);
System.out.println(age);
System.out.println(address);
return "访问成功:hello";
}
2.2 使用 org.springframework.core.env.Environment
对象读取
@RestController
public class YmlController {
@Autowired
Environment environment;
@GetMapping("/env")
public String getEnv() {
String name = environment.getProperty("student.name");
String age = environment.getProperty("student.age");
String address = environment.getProperty("address[0]");
System.out.println(name);
System.out.println(age);
System.out.println(address);
return "访问成功:hello";
}
}
2.3 使用 @ConfigurationProperties 读取
@ConfigurationProperties
注解主要用于将实体类对象与配置文件进行绑定,为实体对象注入属性。
- 首先添加以下依赖,编写配置文件时可以获取智能提示,并且在编译后会根据实体类属性生产JSON文件。
<!-- 让实体类在配置文件中有对应的提示 -->
<!-- 对实体类的属性生成 json 文件,存在于 target/classes/META-INF -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 建立实体类
@Data // lombok,提供 getter 、 setter 等方法
@Component // 注入到容器,交由 spring 管理
@ConfigurationProperties("person") // 使用时需要指定前缀
public class Person {
private String name;
private String age;
private List<String> hobby;
}
- 书写配置文件
person:
name: jacks
age: 23
hobby:
- 编程
- 游戏
- 动漫
- 测试使用
@RestController
public class YmlController {
@Autowired
Person person;
@GetMapping("person")
public Person student() {
return person;
}
}
三、profile
开发时 Spring Boot 应用时,通常会有开发环境、测试环境和生产环境等不同环境,其数据库地址,服务器端口等等配置都会有差别,为了避免每次打包部署都需要修改配置项,所以提供了 profile 功能来动态切换配置环境。
3.1 多 profile 文件配置
分别创建三个配置文件:
- 测试环境配置文件:
application-test.yml
- 开发环境配置文件:
application-dev.yml
- 生产环境配置文件:
application-pro.yml
需要注意的是,前面的 application
名字是固定的,后面的 -xxx
是自定义的。
激活配置文件,在 application.yml
文件中如下配置:
# 表示激活 application-dev 配置文件,要激活哪个文件,需要匹配后面的 application-xxx.yml 中的xxx
spring:
profiles:
active: dev
3.2 yml 多文档
# 激活
spring:
profiles:
active: pro
---
# 标识为 default 的配置文件
spring:
profiles: default
server:
port: 8081
---
# 标识为 dev 的配置文件
spring:
profiles: dev
server:
port: 8082
---
# 标识为 test 的配置文件
spring:
profiles: test
server:
port: 8083
---
# 标识为 pro 的配置文件
spring:
profiles: pro
server:
port: 8084
- 单文件中用
---
分割上下,形成多个文件块。 - 每个文件块中可以使用
spring.profiles
指定每块文件的名字。 - 通过
spring.profiles.active
指定激活哪些文件块。
3.3 profile 激活方式
- 配置文件
spring:
profiles:
active: dev
-
虚拟机参数(VM optionsdd):
-Dspring.profiles.active=test
-
命令行参数:
--spring.profiles.active=pro
四、配置文件加载顺序
能被 Spring Boot 应用扫描到的路径优先级从高到低排序:
- 项目(jar包)同级目录下的 config 目录:
file:./config/
- 项目(jar包)同级目录:
file:./
- 类路径下的config目录:
classpath:/config/
- 类路径下的根目录:
classpath:/
所有文件都能被加载,高优先级的配置文件会覆盖低优先级配置文件的内容。