一、profile
1.1、profile 简介
我们在开发 Spring Boot 应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile 功能就是来进行动态配置切换的。
1.2 配置方式
1.2.1 多 profile 方式
首先,在我们的工程里面创建三个配置文件,如下所示,这个名字是固定的格式,不要随便的修改。
分别在里面配置端口号信息,如下:
# application-dev.properties
server.port=8081
# application-test.properties
server.port=8082
# application-pro.properties
server.port=8081
配置完成后,启动工程,如下图:
1.2.2 yml 多文档方式
我们上面创建了三个配置文件,看着太多了,很不舒服,我们这次只创建一个 application.yml 文件,在里面进行配置,如下图:
在 application.yml 中编写如下内容:
# --- 是固定的模板用来分隔的符号
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
---
server:
port: 8083
spring:
profiles: pro
---
# 在底下激活
spring:
profiles:
active: test
启动工程,如下:
1.3 激活方式
配置完了之后需要激活,如果没有激活就和没配置一样,哪个配置文件都不会生效,一旦激活成功,激活成功的配置文件里面的属性就都会被加载。
1.3.1 配置文件激活
在 application.properties 里面添加如下的属性即可激活。启动工程。
# 这个 dev 是文件的后缀
spring.profiles.active=dev
1.3.2 虚拟机参数激活
打开 idea 的 Edit Configurations ,如下图:
在 VM options 添加 -Dspring.profiles.active=dev
然后启动工程,启动信息如下:
1.3.3 命令行参数激活
打开 idea 的 Edit Configurations ,如下图:
在 Program arguments 添加 --spring.profiles.active=pro
然后启动工程,启动信息如下:
也可以在执行 jar 文件的时候指定命令行参数,格式如下:
java –jar xxx.jar --spring.profiles.active=dev
二、内部配置加载顺序
假设我们使用的是一个 maven 多模块工程,如下图,
Springboot 程序启动时,会加载当前项目的 config 目录、当前项目的根目录、classpath 的 config 目录、以及 classpath 的根目录的配置文件,且优先级是从高到低的,下面分别介绍下
2.1 当前项目的 config 目录
2.2 当前项目的根目录
2.3 classpath 的 config 目录
2.4 classpath 的根目录
三、外部配置加载顺序
上一小节介绍了 springboot 内部文件的加载顺序,接下来介绍下 springboot 外部配置的加载顺序,springboot 允许很多地方定义一个外部的配置,我们简单的来介绍几种,下面的这几种优先级从高到低。
3.1 命令行参数
意味着我们可以在命令行参数的位置来写参数,如下图,我们正常启动 jar 包的命令如下:
java -jar xxxxxx.jar
java -jar xxxxxx.jar --server.port=8088
3.2 指定配置文件位置
还可以在外部指定配置文件的位置,也是在命令行执行时指定,如下图:
java -jar xxxxxx.jar --spring.config.location=e://application.properties
3.3 加载同级的配置文件
3.3.1 加载配置文件
此时 jar 包的位置和配置文件的位置,如下所示
启动 jar 包,可以发现,加载的是外面配置文件的端口号
3.3.2 加载文件夹的配置文件
此时 jar 包的位置和配置文件的位置,如下所示,其中,config 文件夹里面有一个 application.properties 配置文件。
启动 jar 包,可以发现,加载的是 config 文件夹里面配置文件的端口号。