SpringBoot之多Profile配置

2023-03-14,,

近来在利用闲暇时间巩固下SpringBoot的基本知识,然后自己也做一些笔记,整理下当时所学知识,后面就干脆写到这里来了。

多Profile配置文件

在SpringBoot主配置文件编写的时候,文件名可以是application-{profile}.properties/yml。

默认使用的是application.properties配置文件的配置。

applicaiton.properties application-dev.properties application-test.properties application-prod.properties

激活指定配置文件

1、主配置文件中指定激活的profile

如果是properties格式的配置文件,那么可以在主配置文件中这样指定激活的profile:

spring.profiles.active = dev

如果是yml格式的配置文件,你可以用“---”来划分文档块,每个文档块都被看作是一个profile,你可以在主文档块中指定生效的profile:

 server:
prot:
spring:
profiles:
active: dev # 指定激活哪个配置文件 # yml格式配置文件中,用三个横线来区分文档块
# 第一个文档块表示主文档块,并同时指定后续生效的是哪个文档块 ---
# 第二个文档块
server:
port:
spring:
profiles: dev # 声明文档块类型 ---
# 第三个文档块
server:
port:
spring:
profiles: dev

2、命令行激活

在实际生产环境中直接使用命令行启动项目,启动的同时可以指定激活的profile:

java -jar --spring.profiles.active=dev my-spring-boot-app.1.0.0.jar

3、设置虚拟机参数激活

同样,你可以通过设置Java虚拟机参数的方式来激活指定profile:

[vm options:] -Dspring.profiles.action=dev

IDEA编辑器设置:

命令行指定的方式和虚拟机参数设置的方式指定,都可以在IDEA的运行设置中进行配置,如下图:

加载位置与顺序

SpringBoot启动会扫描以下位置的application.properties/yml文件作为spring boot的默认配置文件:

file:./config/
file:./
classpath:/config/
classpath:/

以上是按照优先级从高到低的顺序,所有位置的文件都会被加载,高优先级配置内容会覆盖低优先级配置的内容,并形成互补配置;当然,我们也可以通过spring.config.location来改变默认配置。

上面的:

file: 指当前项目根目录
classpath: 指当前项目的resources目录

给出一个图例:

注意:maven打包是不能把src外面的两个application.properties文件打到jar包里的。

在项目打包好之后,我们可以通过命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的这些配置文件会共同生效,并形成互补配置。

这在运维的时候很有用,因为可以通过命令行的方式指定生效的配置文件,较为灵活。

外部配置

SpringBoot还支持多种外部配置方式,生效优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置形成互补配置

    命令行参数
    来自java:comp/env的JNDI属性
    Java系统属性(System.getProperties())
    操作系统环境变量
    RandomValuePropertySource配置的ramdom.*属性值
    jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
    jar包外部的application.properties或application.yml(不带spring.profile)配置文件
    jar包内部的application.properties或application.yml(不带spring.profile)配置文件
    @Configuration注解类上的@PropertySource
    通过SpringApplication.setDefaultProperties指定的默认属性

其实在官网有17种这样的配置说明,可以从下面进入:

https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html

重点关注上面列举的1、6、7、8、9这几项,生效的配置文件,都是由jar包外向jar包内进行寻找的,优先加载带profile,再加载不带profile的。比如有个application.properties的配置文件和xxx.jar放置在同一个目录,那么项目启动时一定是先加载这个application.properties文件,再去加载xxx.jar里面的配置文件的。

参考资料

1、https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/

SpringBoot之多Profile配置的相关教程结束。

《SpringBoot之多Profile配置.doc》

下载本文的Word格式文档,以方便收藏与打印。