文章目录
前言
springboot 2.4 以后配置引入配置的方式有些不同
本人项目配置结构:
common为子公共模块,最终打包出来也是一个jar
application-common.yml里面也是公共的配置,但是也是区分环境的
提示:以下是本篇文章正文内容,下面案例可供参考
一、各项配置的理解?
1.spring.profiles.include、group | spring.config.import
先给出原始的配置(sb 2.4以前的版本使用)
# application.yml
spring:
profiles:
include: common
# application-dev.yml
spring:
profiles:
include: common-dev
上面这种配置方式只需要在启动时指定dev,最终生效的profile即:“dev”,“common”,“common-dev”
java -jar xx.jar --spring.profiles.active=dev
sb 2.4以后官方说了禁止在非根配置文件下再激活其他配置文件,这会导致某些配置被覆盖
按照新的规则,将上面的配置修改如下:
# application.yml
spring:
config:
import: optional:application-common.yml
profiles:
group:
"dev": "common-dev"
# application-dev.yml
# 仅包含dev生效的项目配置
- spring.config.import:类似于以前的include,引入指定配置,不会打印在启动日志的
"The following x profiles are active: xxx"
,但会生效 - spring.profiles.group: 指定当某个环境生效时,也附带将配置的环境一同生效,对应上面的配置就是,当指定 “dev” 生效时,“common-dev” 也一同生效
按照上诉理解,上的 application.yml 也可以变成以下两种配置方式,都可以生效
# application.yml
spring:
profiles:
include: common
group:
"dev": "common-dev"
# application.yml 当然这种方式如果不指定 dev 的话,common 也是不会生效的
spring:
profiles:
group:
"dev": "common,common-dev"
2.spring.profiles.active
spring.profiles.active 这配置只有一点需要注意,当配置文件如下
# application.yml
spring:
profiles:
active: dev
却使用 java -jar xx.jar --spring.profiles.active=prod
启动时,最终生效的环境只有prod,不包含dev,即会被覆盖掉
二、关于官方迁移文档的理解
1. “—” :三个短横线
这个标识符是指在一个yml文件里面需要配置不同环境生效的配置,需要是用这个分隔符
2.spring.config.activate.on-profile
这个配置是结合三个短横线一起使用,标识这一段配置仅在指定环境生效时才加载,直至加载到下一个分隔符(三短横线)。这个配置是用来替换下面这种配置的:
spring:
profiles: "dev"
如果之前项目没有这样用过,那 spring.config.activate.on-profile 这个配置也几乎可以忽略。
由于我的项目都是以xxx-dev.yml,xxx-prod.yml文件区分的,所以固然用不到这个配置,当然非要加也不是不可以的
如下两种配置,当指定dev时是一样的:
# application.yml
---
spring:
config:
activate:
on-profile: dev
a: 1
# application-dev.yml
a: 1
总结
原则就是一个:不要在 xxx-dev.yml 再激活其他环境配置,或者如下使用都是禁止
spring:
config:
activate:
on-profile: dev
profile:
active: test
统一在根配置文件 application.yml 里面加载,反正官方推荐用group。