【笔记】SpringBoot项目的配置

前言

SpringBoot项目的配置

配置文件的类型

application.properties:(缺省值)键值对方式的配置
application.yml:(最常用)Yaml方式的配置。.yml.yaml的配置没有任何区别,只是扩展名不相同
application.yaml:Yaml方式的配置。.yaml.yml的配置没有任何区别,只是扩展名不相同

  • 当三个配置文件同时存在时,优先级为application.properties>application.yml>application.yaml

手动配置SpringBoot项目的配置文件

  • 如果IDEA没有自动识别出配置文件,可能会出现编辑器不提示的问题,可以手动添加配置到SpringBoot项目的配置文件配置

  • File->Project Structure

  • Facets->选中SpringBoot模块->选择配置文件配置按钮->选择添加按钮->选择没有加入到SpringBoot配置文件配置的文件->Open->OK->OK

配置选项

服务器端口号配置

1
server.port=8080

SpringBoot日志级别配置

info:缺省值,只显示信息级别
warn:警告级别(信息量较少)
debug:调试级别(信息量较大)

1
logging.level.root=info

多环境的配置

properties配置文件的多环境配置

  • 创建多个配置文件,在-后添加环境名
1
2
3
4
- application.properties
- application-dev.properties
- application-pro.properties
- application-test.properties
  • 在主配置中设置启用的环境
application.properties
1
spring.profiles.active=dev

yml和yaml配置文件的多环境的配置

  • 通过---将多套配置文件分割
    • 在第一个区域设置启用的环境,第一个区域是公共的,不会因为环境的切换而被修改
    • 其他区域配置不同环境使用的配置

spring.profiles.active:根据环境名,设置启用的环境
spring.profiles:指定一个环境名,并在下面配置当前环境的所有配置

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
spring:
profiles:
active: dev

---

spring:
profiles: dev

server:
port: 8080

---

spring:
profiles: pro

server:
port: 80

---

spring:
profiles: test

server:
port: 8888

以上写法已过时,应当替换为以下写法

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
spring:
profiles:
active: dev

---

spring:
config:
activate:
on-profile: dev

server:
port: 8080

---

spring:
config:
activate:
on-profile: pro

server:
port: 80

---

spring:
config:
activate:
on-profile: test

server:
port: 8888

启动时指定环境

<file>.jar:指定需要启动的Jar包
--spring.profiles.active=:指定环境名

1
java -jar <file>.jar --spring.profiles.active=dev

可能出现的问题

  • 配置完多环境后,执行package生命周期之前,最好先执行clean生命周期
  • 配置文件中出现中文有可能导致打包失败,应该在打包之前将IDEA的打包时所用的字符编码改为UTF-8

IntelliJ IDEA->Proferences->Editor->File Encodings

Global EncodingUTF-8
Project EncodingUTF-8
Default encoding for properties filesUTF-8

SpringBoot多环境与Maven多环境的兼容

  • SpringBoot中的多环境,可以指定项目配置的多环境
  • Maven中的多环境,可以指定依赖的多环境
  • 通常情况下,为了避免两者的环境冲突,应该让SpringBoot获取Maven中的或环境配置信息,从而改变SpringBoot配置的多环境,起到SpringBoot与Maven共同维护多环境配置的作用

添加插件

  • 添加maven-resources-plugin插件,使Maven中定义的自定义属性可以被资源文件目录下的配置文件访问
pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>UTF-8</encoding>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins>
</build>

Maven中的配置

  • 在Maven的多环境配置中添加用于传递给SpringBoot配置文件的自定义属性
pom.xml
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
<profiles>
<!-- 开发环境 -->
<profile>
<id>dev</id>
<properties>
<profile.active>dev</profile.active>
</properties>
<!-- 设置为当前的环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!-- 生产环境 -->
<profile>
<id>pro</id>
<properties>
<profile.active>pro</profile.active>
</properties>
</profile>
<!-- 测试环境 -->
<profile>
<id>test</id>
<properties>
<profile.active>test</profile.active>
</properties>
</profile>
</profiles>

SpringBoot中的配置

  • 在SpringBoot的配置文件中获取从Maven传递来的自定义属性的值,根据传递过来的Maven环境名,动态改变SpringBoot的环境名

${profile.active}:获取从Maven传递过来的自定义参数

src/main/resources/application.yml
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
spring:
profiles:
active: ${profile.active}

---

spring:
config:
activate:
on-profile: dev

server:
port: 8080

---

spring:
config:
activate:
on-profile: pro

server:
port: 80

---

spring:
config:
activate:
on-profile: test

server:
port: 8888

多级配置

  • 如果有出现了多级目录的配置文件,按照如下优先级

jar包所在目录/config/application.yml>jar包所在目录/application.yml>src/main/resources/config/application.yml>src/main/resources/application.yml

jar包所在目录下的配置文件是为生产环境使用的
src/main/resources下的配置文件是为开发环境使用的

完成

参考文献

哔哩哔哩——黑马程序员