配置文件类型

主要有两种,分别为properties格式的和yaml格式的

properties

此配置文件注重格式,不同等级使用.分割,如下

1
2
3
server.port=80
server.xxx.xxx=xxx
server.xxx.xxx.xxx=xxx

yaml

此配置文件后缀分为两种,一种是以.yml结尾,较为常用,一种是以.yaml结尾,他们的格式都是一样的,只是文件后缀不一样

此配置文件的格式注重数据,以空格分级,空格不限次数,建议使用两个空格分级,案例如下

1
2
3
4
5
6
7
8
9
10
student:
school: "成都工业学院"
clazz: "软件工程22级专升本1班"
name: "马某人"
phone: "19960798888"
age: 21
hobbies:
- "跑步"
- "骑自行车"
- "狂吃一顿"

yaml的数据类型

yaml的数据类型分为四种

  1. 字符串(String):表示文本内容,可以使用单引号或双引号括起来。例如:name: 'John'
  2. 数字(Number):表示数值。可以是整数或浮点数。例如:age: 25
  3. 布尔值(Boolean):表示真或假。可以是true或false。例如:isStudent: true
  4. 列表(List):表示有序的元素列表。使用短横线(-)作为前缀,并使用缩进表示层级关系。

其中:如果字符串不用引号分隔,则会自动解析,如果使用引号则表示为字符串,并且''包裹的字符串内的内容不会转义,""包裹的字符串会进行转义。

读取YAML配置文件

首先SpringBoot默认会去读取项目根目录下src/main/resources目录下的application.propertiesapplication.ymlapplication.yaml这三个配置文件

并且优先级按从左到右依次降低,SpringBoot读取YAML配置文件分为三种方法

value

在类中直接使用@value注解来获取,使用${}来获取YAML中的数据,案例如下

1
2
@Value("${student.hobbies[0]}")
private String hobbit;

Environment

SpringBoot在容器中已经有了一个装了YAML中所有内容的类,类名为org.springframework.core.env.Environment

自动注入即可,案例如下:

1
2
3
4
5
6
7
@Autowired
private Environment environment;

@GetMapping("/environment/student/name")
public JsonData getStudentNameByEnvironment() {
return new JsonData(0, environment.getProperty("student.name"), "处理成功!");
}

自定义类

给需要装载数据的类打上注解,并让Spring容器进行管理。

其中@ConfigurationProperties(prefix = "student")注解中的prefix是必须要写的,并且要与配置文件中的对象名保持一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.example.domain;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Repository;

import java.util.Arrays;

/**
* @author makun
* @project spring-boot
* @description
* @date 2022/12/29 13:42:08
* version 1.0
*/
// 读取YAML中student节点的数据
@ConfigurationProperties(prefix = "student")
// 交给Spring容器管理
@Repository
public class Student {
private String school;
private String clazz;
private String name;
private String phone;
private Integer age;
private String[] hobbies;

public Student() {
}

public Student(String school, String clazz, String name, String phone, Integer age, String[] hobbies) {
this.school = school;
this.clazz = clazz;
this.name = name;
this.phone = phone;
this.age = age;
this.hobbies = hobbies;
}

@Override
public String toString() {
return "Student{" +
"school='" + school + '\'' +
", clazz='" + clazz + '\'' +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
", age=" + age +
", hobbies=" + Arrays.toString(hobbies) +
'}';
}

public String getSchool() {
return school;
}

public void setSchool(String school) {
this.school = school;
}

public String getClazz() {
return clazz;
}

public void setClazz(String clazz) {
this.clazz = clazz;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPhone() {
return phone;
}

public void setPhone(String phone) {
this.phone = phone;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public String[] getHobbies() {
return hobbies;
}

public void setHobbies(String[] hobbies) {
this.hobbies = hobbies;
}
}

光完成上面两步还不够,这时候IDEA会有警告,需要在pom配置文件中添加一个依赖坐标,就不会有警告了

1
2
3
4
5
 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>

使用方法如下

1
2
3
4
5
6
7
@Autowired
private Student student;

@GetMapping("/yaml/student")
public JsonData getYamlStudentByDomain() {
return new JsonData(0, student, "处理成功!");
}

多配置文件

通常开发中,项目需要运行在许多环境中,例如:开发环境、测试环境与生产环境。

如果每次移动项目就需要更改配置文件是特别麻烦的,多配置文件能帮助我们解决这个问题。

多文档

多配置文件命名规则:application-xxx.properties,当然,使用yaml也是可以的。

需要执行哪个配置,就在application.properties中配置spring.profiles.active=xxx就行了。

yaml多文档

yaml使用---来分隔不同的配置,并使用spring.profiles=xxx在不同配置区域为配置命名,使用spring.profiles.active=xxx激活配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
---
server:
port: 8081

spring:
profiles: dev
---
server:
port: 8082

spring:
profiles: test
---
server:
port: 8083

spring:
profiles: pro
---

# 激活哪个配置
spring:
profiles:
active: dev

外部激活

上面两种都是在项目内部使用spring.profiles.active=xxx激活配置文件的,下面介绍两种项目外部激活配置的方式。

  1. 虚拟机参数:在VM options指定:-Dspring.profiles.active=dev
  2. 命令行参数:运行jar包时指定配置文件:java –jar xxx.jar --spring.profiles.active=xxx