1. 使用 Spring-Boot Profiles 拆分 application.yml 文件

首先我们有一个非常简单的 application.yml 文件

database: mysql
spring:datasource:url : jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8username : rootpassword : 12345678

Yml

我们现在有开发环境(dev)、测试环境(test)、生产环境(prod)

修改application.yml 文件

database: mysqlspring:profiles:active: dev#这两行实际没意义,如果有其他公共参数可以补充进来
spring:datasource:#开发环境
spring:profiles: devspring:datasource:url : jdbc:mysql://127.0.0.1:3306/dev?characterEncoding=UTF-8username : rootpassword : 12345678#测试环境
spring:profiles: testspring:datasource:url : jdbc:mysql://127.0.0.1:3306/test?characterEncoding=UTF-8username : rootpassword : 12345678#生产环境
spring:profiles: prodspring:datasource:url : jdbc:mysql://127.0.0.1:3306/prod?characterEncoding=UTF-8username : rootpassword : 12345678

Yml

我们只需要在 spring.profiles.active 指定使用的 profiles

当然目前来说,这种配置文件并不符合我们的需求,我们需要把不同环境的参数放到不同的文件中。

通过与配置文件相同的命名规范,创建 application-{profiles}.yml 文件 存放不同环境的参数。

修改 application.yml

database: mysqlspring:profiles:active: dev#这两行实际没意义,如果有其他公共参数可以补充进来
spring:datasource:

Yml

创建 application-dev.yml

spring:datasource:url : jdbc:mysql://127.0.0.1:3306/dev?characterEncoding=UTF-8username : rootpassword : 12345678

Yml

2. 启动参数

如果 spring.profiles.active 没有指定值,那么只会使用没有指定 spring.profiles 的值,也就是只会加载通用的配置。

并且我们可以在启动应用程序的时候,对 spring.profiles.active 进行指定,这样就不需要每次修改环境都需要手动修改配置文件再编译。

例如运行 Jar 包,指定使用 dev 环境参数:

java -jar xxx.jar --spring.profiles.active=dev

Shell

3. 使用 Maven 在打包时只加载特定的 Profiles 配置文件

由于各种各样的原因,我们肯定希望打出哪个环境的包,就只需要包含这个环境的配置文件即可,不想包含其他环境的配置文件,这时候可以直接在 maven 中使用 profilesresources 来配置,打包时使用 mvn package -P dev 即可,仍然使用 java -jar xxx.jar --spring.profiles.active=dev 来运行。

<profiles><!--开发环境--><profile><id>dev</id><properties><spring.profiles.active>dev</spring.profiles.active></properties><activation><activeByDefault>true</activeByDefault></activation></profile><!--测试环境--><profile><id>test</id><properties><spring.profiles.active>test</spring.profiles.active></properties></profile><!--生产环境--><profile><id>prod</id><properties><spring.profiles.active>prod</spring.profiles.active></properties></profile>
</profiles>
<build><resources><resource><directory>src/main/resources</directory><filtering>false</filtering></resource><resource><directory>src/main/resources.${spring.profiles.active}</directory><filtering>false</filtering></resource></resources>
</build>

XML

4. 使用 Maven 在打包时自动通知 Spring-Boot 加载的 Profiles 环境参数

虽然每次都可以打包成相应配置文件的 Jar 包,但是每次运行,都得用 --spring.profiles.active 参数来指定运行环境,打包时指定一次,运行时指定一次,确实很麻烦。

不自动不舒服,下面我们就来看看怎么把这个参数可以省略掉。

首先我们得知道,加这个参数的原因就是想着项目中存在多个环境,这个环境是需要在 application.yml 中配置,或者运行时通过参数指定。

实际上我们在使用 maven 打包时就能确定我们所选的运行环境,所需要的配置文件,那么我们不想在运行时通过参数来指定,那么我们可不可以修改 application.yml 配置文件呢,这样就不需要我们运行时来指定参数了吧。

下面就介绍两种方法来实现这个功能:

4.1. 方法1:利用 maven filter 来替换标记的内容

这个方法直接在上一步的基础上,增加一个占位符标记,并且在 resource 中将过滤器打开。

修改 pom.xml 文件

<!-- profiles部分不变 -->
<properties><resource.delimiter>#</resource.delimiter>
</properties>
<build><resources><resource><directory>src/main/resources</directory><filtering>true</filtering></resource><resource><directory>src/main/resources.${spring.profiles.active}</directory><filtering>false</filtering></resource></resources>
</build>

XML

修改 application.yml 文件

spring:profiles:active: #spring.profiles.active#

Yml

这里我们通过 <resource.delimiter>#</resource.delimiter> 重写定义了一个占位符,其实熟悉 maven 的朋友都知道,maven 本身有自带的占位符 ${...} ,但是在 Spring-Boot 中不行,这个占位符被 Spring-Boot 占用了,所以我们就得重新定义一遍。再通过 <filtering>true</filtering> 这样的一个设置,打开过滤器开关,这样 application.yml 文件中的 #spring.profiles.active# 部分就会替换为 pom.xmlprofiles 中定义的 spring.profiles.active 变量值。

4.2. 方法2:利用 maven-resources-plugin 插件

maven 的 maven-resources-plugin 插件使用方法也是很简单的,首先,干掉我们上面所用的 <build><resources></resources></build> 这插件就是用来代替他的高级版。

接着我这里有一个示例,一看就懂的那种。

修改 pom.xml 文件

<!-- profiles部分不变 -->
<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.7</version><executions><execution><id>default-resources</id><phase>validate</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>target/classes</outputDirectory><useDefaultDelimiters>false</useDefaultDelimiters><delimiters><delimiter>#</delimiter></delimiters><resources><resource><directory>src/main/resources/</directory><filtering>true</filtering></resource><resource><directory>src/main/resources.${spring.profiles.active}</directory><filtering>false</filtering></resource></resources></configuration></execution></executions></plugin></plugins>
</build>

XML

修改 application.yml 文件

spring:profiles:active: #spring.profiles.active#

Yml

注意看 pom.xml 中的 <delimiter>#</delimiter> 定义了一个占位符,可以在复制文件的时候,在文件中查找 #...# 将其中的内容进行替换。

通过以上两种方法修改后,再次运行 mvn package -P dev 打包,将生成的 Jar 包用 RAR 解压,直接查看 application.yml 文件,我们可以看到原来的 #spring.profiles.active# 已经被替换成了 dev ,这样在运行 Jar 包时就不需要进行参数指定,直接运行 java -jar xxx.jar 即可。

springboot多环境切换相关推荐

  1. 多环境切换---SpringBoot

    多环境切换 优先级由高到底,高优先级的配置会覆盖低优先级的配置: profile是Spring对不同环境提供不同配置功能的支持,可以通过激活不同的环境版本,实现快速切换环境: [外链图片转存失败,源站 ...

  2. springboot之数据校验及多环境切换

    数据校验及多环境切换 Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理.我们这里来写个注解让我们的age不能超过22: 首先导入依赖 &l ...

  3. 深圳Java培训学习:SpringBoot的yml配置及多环境切换【千锋】

    深圳Java培训学习:SpringBoot的yml配置及多环境切换[千锋] 1,配置风格 从application.properties转换到application.yml 并不改变功能效果,只是改变 ...

  4. 31 SpringBoot多环境的切换(生产环境、开发环境、测试环境)

    参考链接: Spring官网 Spring官网 外部配置加载顺序的说明 SpringBoot多环境的切换(生产环境.开发环境.测试环境)_周太阳的博客-CSDN博客_springboot测试生产环境切 ...

  5. SpringBoot之yaml语法、配置文件、多环境切换

    SpringBoot Banner生成网站:https://www.bootschool.net/ascii 在SpringBoot项目的resource目录下,新建一个banner.txt文件,将自 ...

  6. 06 SpringBoot企业实战多环境切换之Profile

    SpringBoot企业实战多环境切换之Profile 扫盲 server.port=8080表示springboot启动内置tomcat容器使用8080端口 1.多profile文件形式(常见) [ ...

  7. SpringBoot多环境动态环境切换(nacos)

    目录 1. 环境变量切换 1.1 建立各环境配置文件 1.2 设置环境变量 2. nacos配置中心动态切换 2.1 配置文件 2.2 nacos配置 2.3 启动服务 3. 同一nacos环境下服务 ...

  8. springboot环境配置,yml格式,不同环境切换

    配置文件properties.yml格式 注意: 大小写敏感 数据前要有空格 数据格式:对象.数组.纯量.数据格式引用${} # 加载顺序 yml > yaml > properties ...

  9. springboot多环境配置_编辑 SpringBoot|第五章:多环境配置

    多环境配置 在开发应用时,常用部署的应用是多个的,比如:开发.测试.联调.生产等不同的应用环境,这些应用环境都对应不同的配置项,比如swagger一般上在生产时是关闭的:不同环境数据库地址.端口号等都 ...

最新文章

  1. H3C路由器的备份与还原(1)
  2. ADO.Net的小知识(连接数据库)二
  3. Oracle 原理: 数据类型
  4. python 逗号作用 语句间_Python中逗号的三种作用
  5. 正则表达式引擎执行原理——从未如此清晰!
  6. Java IO: FileInputStream
  7. 群雄逐鹿,AI如何落地刷脸支付
  8. android音视频焦点切换
  9. JavaScript入门案例
  10. 安卓自动滑屏脚本_按键精灵自动滑屏脚本
  11. 浙大新增机器人工程、人工智能专业:今年招生,导师阵容强大
  12. 【AD小知识】PCB布线理论及实际操作
  13. 博客园 首页 新随笔 联系 订阅 管理 如何使用电脑上的谷歌浏览器来调试安卓手机上的移动端页面...
  14. uniapp uview 1.x设置遮罩层全屏loading
  15. 一个女孩跳楼看到的(漫画)
  16. [4G5G基础学习]:流程 - 4G LTE PLMN选择、扫频、小区搜索、系统消息读取、小区选择过程
  17. 一文看懂IO多路复用
  18. 【已解决】程序异常终止:Process finished with exit code -1073741819 (0xC0000005)
  19. java二级考试试题题型有哪些_哪里有计算机二级题库?计算机二级考试题型有哪些?...
  20. 用Matlab画直方图

热门文章

  1. Scrapy的debug方式
  2. Python基础 - MySQLdb模块
  3. 血泪八条---给中国IT教育培训机构
  4. mysql巡检常用命令_mysql 常用命令
  5. linux修改ip dhcp,Linux下在静态IP与动态DHCP之间切换的脚本
  6. python如何监听toast提示信息_python 怎样获取toast?
  7. mysql一对多增删改查_SQLAlchemy 增删改查 一对多 多对多
  8. 小程序获取openid保存缓存吗_小程序获取openid踩坑
  9. 设计灵感|总有一款对话界面符合你的应用风格!
  10. php7 测试数据库_达梦数据库PHP连接测试