文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot Profiles 多环境配置及切换

2024-04-02 19:55

关注

前言

大部分情况下,我们开发的产品应用都会根据不同的目的,支持运行在不同的环境(Profile)下,比如:

这里的 环境 实际上是一个统称,不同的环境可能代表着

以数据库为例,应用在开发环境下运行时,连接的是开发环境对应的数据库;应用在生产环境下运行时,连接的是生产环境对应的数据库。

我们不是要为不同的运行环境开发多个不同的应用,而是要使应用可以运行在多个不同的环境中,怎么做到?

通过配置,更准备地说,是通过配置属性。配置属性本质就是键值对。

以数据库为例,应用连接数据库时,需要提供如下连接信息:

这些信息不会 硬编码 到应用代码中,而是以配置属性(键值对)的形式存储到配置文件中;应用运行时通过读取该配置文件中的配置属性,进而完成数据库的连接。

应用 = 程序代码 + 配置文件

这个配置文件中连接信息指向测试使用的数据库,我们就说应用运行在测试环境;连接信息指向生产使用的数据库,我们就说应用运行在生产环境;应用需要使用的其它服务(如:Redis、Kafka等)也是同样的原理。

也说是说,我们可以通过为应用运行时指定不同的配置文件(不同的配置文件配置着不同的配置属性),就可以使得应用可以运行在不同的环境中。SpringBoot 实际上也是通过类似的原理实现多环境的配置及切换的。

注:配置属性可能有多种存储方式,这里仅以配置文件为例。

默认环境配置

多环境配置及切换并不是每个应用所必须的,SpringBoot 也为我们考虑到了这一点,它提供了默认的配置文件和运行环境,即:如果没有特别指定,SpringBoot 使用默认的配置文件,运行于默认环境中。

默认配置文件

SpringBoot 默认配置文件:application.yml,默认位于类路径下。其中,application 代表 SpringBoot 配置文件名称,yml 代表配置文件格式(后缀)。

默认配置文件实际也可以不提供,或者内容为空。这是为什么呢?

SpringBoot 是一个功能十分丰富的技术框架,自身内置了很多的配置属性,用以控制 Spring 容器的初始化行为;同时,SpringBoot 也支持通过外置配置文件的方式引入其它的配置属性,application.yml 就是会被 SpringBoot 默认加载的外置配置文件之一。

SpringBoot 配置属性 = 内置配置属性 + 外置配置文件属性(application.yml)

如果 application.yml 不存在或者内容为空,SpringBoot 仅使用内置配置属性初始化容器环境;如果 application.yml 存在且内容不为空,SpringBoot 使用内置配置属性和 application.yml 配置属性的合集初始化容器环境。

如果 application.yml 中的配置属性名称和内置属性相同,那么这个配置属性值最终以 application.yml 中的配置值为准(覆盖)。相当于,application.yml 的配置文件属性优先级高于默认的内置属性。

注:SpringBoot 也支持 properties 后缀的配置文件格式,本文以 yml 为例。

默认运行环境

SpringBoot 默认运行环境:default,default 为运行环境名称。

默认运行环境的名称是哪里来的呢?

如前文所述,SpringBoot 是有内置属性的,默认的运行环境名称即来自于内置属性:


spring.profiles.active=default

也就是说,内置配置属性 spring.profiles.active 指定 SpringBoot 的运行环境名称为 default,我们可以将其指定为其它值,进行改变运行环境名称。

多环境配置

因为 application.yml 配置属性的优先级高于默认的内置属性,我们可以通过在 application.yml 中指定配置属性 spring.profiles.active 的值为 dev,将 SpringBoot 运行环境的名称修改为 dev:


application.yml

spring:
  profiles:
    active: dev

仅仅是修改运行环境名称么?SpringBoot 帮我们做的还有更多,它会自动搜索名称为 application-dev.yml 的配置文件并加载其中的配置属性。

配置文件名称是有固定模式的:


application-{profile}.yml

其中,{profile} 为我们通过配置属性 spring.profiles.active 指定的运行环境名称。

也就是说,如果我们指定运行环境名称为 dev,SpringBoot 会为我们自动搜索加载配置文件名称为 application-dev.yml 中的配置属性;如果我们指定运行环境名称为 test,SpringBoot 会为我们自动搜索加载配置文件名称为 application-test.yml 中的配置属性;其它运行环境名称同理。

SpringBoot 配置属性 = 内置属性 + application.yml 配置属性 + application-{profile}.yml 配置属性

SpringBoot 配置属性优先级:application-{profile}.yml 配置属性 > application.yml 配置属性 > 内置属性

也就是说,我们可以通过指定不同的运行环境名称,以及相应名称的配置文件,从而实现多环境之间的切换。

注:如果找不到相应环境(profile)的配置文件,则会忽略。

多环境切换

以开发环境(dev)、测试环境(test)、预览环境(pre)、生产环境(prod)为例,我们可以预先在项目中创建相应环境的配置文件:


application-dev.yml
application-test.yml
application-pre.yml
application-prod.yml

每一个环境的配置文件中配置相应环境对应的属性,如:数据库连接信息等;然后在 application.yml 中通过指定配置属性 spring.profiles.active 为不同的值实现多环境切换,如:


spring:
  profiles:
    active: prod

代表 SpringBoot 的运行环境名称为 prod,它将会加载 application-prod.yml 中的配置属性。

还可以在 SpringBoot 启动时,通过命令行参数的方式指定配置属性:


java -jar myproject.jar --spring.profiles.active=prod

SpringBoot 配置属性优先级:命令行参数配置属性 > application-{profile}.yml 配置属性 > application.yml 配置属性 > 内置属性

推荐的方式是通过 application.yml/spring.profiles.active 指定 SpringBoot 应用默认的运行环境,应用启动时通过命令行参数指定具体的运行环境;如果启用启动时没有指定,则应用使用默认的运行环境运行。

小结

SpringBoot 多环境配置及切换,本质就是通过预先设定好多个运行环境名称及相应的配置文件;应用启动时通过指定运行环境名称,进而加载对应名称的配置文件实现的。

实际使用时,我们还可以充分利用配置属性加载的优先级合理地规划应用的配置属性,比如:

到此这篇关于SpringBoot Profiles 多环境配置及切换的文章就介绍到这了,更多相关SpringBoot Profiles 多环境内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯