spring.profiles.active和spring.profiles.include的使用与区别 您所在的位置:网站首页 include区别 spring.profiles.active和spring.profiles.include的使用与区别

spring.profiles.active和spring.profiles.include的使用与区别

2023-12-16 07:04| 来源: 网络整理| 查看: 265

spring.profiles.active和spring.profiles.include的区别与使用 业务场景优化方式spring.profiles.active属性启动时指定: spring.profiles.include属性配置方法:配置的位置和区别: 用示例来使用和区分测试一:测试二:测试三:测试四

业务场景

一套程序可能会被部署到不同的环境。开发、测试、生产环境有不同的配置信息,包括jdbc地址、ip、端口等。如果在同一个配置文件中,每次部署去改配置,会非常麻烦且容易出错。

优化方式 spring.profiles.active属性

一个好方法就是创建不同的配置文件,且命名规则遵循application-${profile}.properties,例如:

开发环境配置文件:application-dev.properties测试环境配置文件:application-test.properties生产环境配置文件:application-prod.properties

当然,我们不能删除项目最顶层的application.properties配置,在该文件中,根据部署场景不同,切换不同的配置文件:配置spring.profiles.active,属性值为${profile}。

spring.profiles.active=dev:启用application-dev.propertiesspring.profiles.active=test:启用application-test.propertiesspring.profiles.active=prod:启用application-prod.properties

在此推荐一个结合pom.xml的配置方式: application.properties中配置:

[email protected]@

pom.xml中配置:

xxx ${profileActive} datasience ${profileActive} true 启动时指定:

在执行有参启动时,可以在命令中进行指定要选用的配置文件,例如: java -jar xx.jar --spring.profiles.active=test 这个命令的优先级是最高的,即使application.properties中已经配置spring.profiles.active=dev,最终程序还是会用application-test.properties配置文件。

spring.profiles.include属性

再进一步,对于开发环境,想用不同的配置文件存储开发环境不同的配置,例如: application-dev1.properties中存储jdbc信息 application-dev2.properties中存储ip、端口信息 即在启用application-dev.properties开发环境(主)配置文件时,同时启用application-dev1.properties和application-dev2.propertie。 那么,可以使用spring.profiles.include属性:同时启用其他的profile

配置方法: 若是properties文件:spring.profiles.include=dev1,dev2若是yaml文件中, spring.profiles.include: -dev1 -dev2 或者:spring.profiles.include:dev1,dev2 配置的位置和区别: 配置方式一:application.properties中,配置spring.profiles.active=dev的同时指定spring.profiles.include=dev1,dev2配置方式二:application.properties中,配置spring.profiles.active=dev,application-dev.properties中,配置spring.profiles.include=dev1,dev2。使用application-dev.properties时自动就激活了dev1、dev2两个文件,不用再次指定。(个人认为第二种方法更好)

区别:

第一种方式启动时,控制台打印The following profiles are active:dev1,dev2,dev第二种方式启动时,控制台打印The following profiles are active:dev, dev1,dev2 按照顺序,后面的覆盖前面的。 用示例来使用和区分

在某个工程里,我依据开发、生产环境,以及它们要同时激活的配置,创建了多个配置,分别如下: application-dev.properties配置:

my.name=dev my.height=170 #同时触发dev1和dev2的激活 spring.profiles.include=dev1,dev2

application-dev1.properties配置:

my.name=dev1 my.height=171

application-dev2.properties配置:

my.name=dev2 #my.height=172

application-prod.properties配置:

my.name=prod my.height=180

application-prod1.properties配置:

my.name=prod1 my.height=181

application-prod2.properties配置:

my.name=prod2 my.height=182 测试一:

在application.properties配置文件中,指定

#激活的是开发环境配置文件 spring.profiles.active=dev

启动时不指定参数 结果:打印的内容为:姓名:dev2,身高:171 原因:

先加载application.properties再加载application-dev.properties, my.name=dev my.height=170加载application-dev1.properties, my.name=dev1 my.height=171加载application-dev2.properties, my.name=dev2 my.height=171 测试二:

在测试一的基础上,启动时指定参数:–spring.profiles.active=prod 优先级最高,会使用生产环境配置文件 结果:打印的内容为:姓名:prod,身高:180

测试三:

在application.properties配置文件中,指定

#激活的是生产环境配置文件 spring.profiles.active=prod #同时触发prod1和prod2的激活 spring.profiles.include=prod1

启动时不指定参数 结果: The following profiles are active: prod1,prod2,prod 打印的内容为:姓名:prod,身高:180

测试四

在application.properties配置文件中,指定my.height=185,且把dev、dev1、dev2里my.height配置都删掉,最终结果是:身高:185。(application.properties会作那个最保底的配置文件)。 如果把application.properties里的my.height配置也删掉,那请求就得报错啦。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有