SpringBoot Profiles 多环境配置及切换

目录
  • 前言
  • 默认环境配置
    • 默认运行环境
  • 多环境配置
  • 多环境切换
  • 小结

前言

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

  • 开发环境(dev)
  • 测试环境(test)
  • 预览环境(pre)
  • 生产环境(prod)

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

  • 使用的域名、端口、实例数目是不同的;
  • 连接的数据库地址、端口、名称是不同的;
  • 使用的日志输出格式、级别、保存时间是不同的;

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

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

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

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

  • 地址
  • 端口
  • 名称
  • 用户名
  • 密码

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

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

这个配置文件中连接信息指向测试使用的数据库,我们就说应用运行在测试环境;连接信息指向生产使用的数据库,我们就说应用运行在生产环境;应用需要使用的其它服务(如: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 多环境配置及切换,本质就是通过预先设定好多个运行环境名称及相应的配置文件;应用启动时通过指定运行环境名称,进而加载对应名称的配置文件实现的。

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

  • 通用配置(与运行环境无关的)属性可以放到 application.yml 中;
  • 运行环境(profile)相关的配置属性可以放到相应的 application-{profile}.yml 中;
  • 启动时需要临时指定的配置属性可以通过命令行参数设置;
  • 2 和 3 中配置属性也可以放到 application.yml 中一份,作为默认配置。

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

(0)

相关推荐

  • springboot yml中profiles的巧妙用法(小白必看多环境配置)

    遥想当年我还是个小白的时候,就只是写写demo,也就在一套环境上跑跑,真正当实战的时候,除了你本地环境,还有开发环境,测试环境,生产环境(上线)等等. 如果你不知道用这个profiles,那么这么多套环境,用一种老古董的写法就是这样,用哪个环境就把其他环境注释掉! spring: datasource: username: root #dev password: 123456 #dev #username: root2 #test #password: 456789 #test ... 这还只2

  • SpringBoot Profiles 多环境配置及切换

    目录 前言 默认环境配置 默认运行环境 多环境配置 多环境切换 小结 前言 大部分情况下,我们开发的产品应用都会根据不同的目的,支持运行在不同的环境(Profile)下,比如: 开发环境(dev) 测试环境(test) 预览环境(pre) 生产环境(prod) 这里的 环境 实际上是一个统称,不同的环境可能代表着 使用的域名.端口.实例数目是不同的: 连接的数据库地址.端口.名称是不同的: 使用的日志输出格式.级别.保存时间是不同的: 以数据库为例,应用在开发环境下运行时,连接的是开发环境对应的

  • 使用Spring boot 的profile功能实现多环境配置自动切换

    通常服务端应用开发需要经过以下几个流程: 开发 -> 测试 -> RC验证 -> 上线 这就涉及到四个不同的环境,开发环境.测试环境.RC环境以及生产环境,为了避免不同环境之间相互干扰,通常需要独立部署数据库.缓存服务器等,那么应用配置也要做相应的调整. 为了解决不同环境配置切换问题,很多人的做法是:把配置文件根据不同的环境,放到不同的目录或文件中,打包时通过gradle或maven,通过命令行参数指定要打哪个环境的包.这样就可以针对不同的环境生成不同的包.但这样的做法有以下几个问题:

  • SpringBoot Profile多环境配置方式

    目录 Profile多环境配置 Profile配置详解 1.问题 2.为什么要使用profiles Profile多环境配置 我们在开发项目时,通常同一套程序会被发布到几个不同的环境,比如:开发.测试.生产等.其中每个环境的数据库地址.redis地 址.服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事. 对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后

  • springboot打包不同环境配置以及shell脚本部署的方法

    前言 本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作: profiles指定不同环境的配置 maven-assembly-plugin打发布压缩包 分享shenniu_publish.sh程序启动工具 linux上使用shenniu_publish.sh启动程序 profiles指定不同环境的配置 通常一套程序分为了很多个部署环境:开发,测试,uat,线上 等,我们要想对这些环境区分配置文件,可以通过两种方式: 通过a

  • springboot学习笔记之 profile多环境配置切换的实现方式

    前言 一个应用程序从开发到上线,往往需要经历几个阶段,例如开发.测试.上线.每个阶段所用到的环境的配置可能都是不一样的,Springboot 应用可以很方便地在各个环境中对配置进行切换.所以,今天主要介绍Springboot profiles实现多环境配置切换. profiles多环境配置切换的四种方式 多个配置文件的方式yml 多文档块方式 设置程序参数 设置虚拟机参数 1.多个配置文件的方式 1.1.修改application.properties server.port=8080 1.2.

  • springboot 多环境配置 yml文件版的实现方法

    关于 dev.sit.uat.prod多环境切换的配置 最近小伙伴跟杨洋我聊到了多环境配置的问题,网上的大部分教程都是copy的,很多文章根本就没法用,小伙伴很苦恼啊,于是心(yu)地(shu)善(lin)良(feng)的杨洋回去写了个demo给了小伙 , 那么这边文章呢,正好给大家讲解下关于springboot 的多环境配置 科普时间:  dev.sit.uat.prod是什么呢? 首先给刚接触的小伙伴们科普下含义 dev--本地开发环境: sit--测试环境: uat--准生产环境: pro

  • springboot多环境配置方案(不用5分钟)

    一 前言 本篇文章的主题是在springboot中写多个配置文件,指定让个配置文件生效,以便于达到在开发环境,测试环境,线上环境根据不同的配置灵活应用:读完本篇你将获得,学会springboot的多环境配置:学会使用idea配置虚拟机参数启动不同的配置文件:学会使用jar包运行并且指定不同的配置文件等: 二 激活方式一 spring框架内部提供了2中方式用于加载YAML文档,以供启动时读取配置文件:YamlPropertiesFactoryBean 会 加载 YAML 变为 Properties

  • Springboot如何使用logback实现多环境配置?

    前言 Logback是由log4j创始人设计的又一个开源日记组件,Logback 当前分成三个模块:logback-core,logback- classic和logback-access.logback-core是其它两个模块的基础模块,logback-classic是log4j的一个改良版本.此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日记系统如log4j或JDK14 Logging.logback-access访问模块与Servlet容器集成提供通

  • Springboot与Maven多环境配置的解决方案

    Profile用法 我们在application.yml中为jdbc.username赋予一个值,这个值为一个变量 jdbc: username: ${jdbc.username} Maven中的profiles可以设置多个环境,当我们选择a环境后,<jdbc.username>内的值将替换上述配置文件中的变量 </profiles> <profile> <id>a</id> <properties> <jdbc.usernam

  • Springboot内外部logback多环境配置详解

    目录 一.概述 二.项目内外配置 三.使用自定义appender 四.logback查找配置源码 五.案例源码 一.概述 SpringBoot官方文档Springboot 默认读取的是项目内的 resources 中 logback 配置文件.如果 classpath(resources) 下有logback-test.xml会优先生效,并且会和其他logback文件同时生效.Springboot 默认日志级别是DEBUG,所以在logback初始化之前,会有DEBUG日志输出. 二.项目内外配

随机推荐