SpringBoot多环境配置及配置文件分类实例详解

 更新时间:2022年10月11日 09:24:08   作者:|旧市拾荒|  
这篇文章主要介绍了SpringBoot多环境配置及配置文件分类,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、多环境配置

在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。

来回的修改配置会很麻烦,而 SpringBoot 给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境开发的配置都不相同,接下来对不同类型的配置文件进行说明

1.1 yaml文件

application.yml 中使用 --- 来分割不同的配置,内容如下

#开发
spring:
  profiles: dev #给开发环境起的名字
server:
  port: 80
---
#生产
spring:
  profiles: pro #给生产环境起的名字
server:
  port: 81
---
#测试
spring:
  profiles: test #给测试环境起的名字
server:
  port: 82
---

上面配置中 spring.profiles 是用来给不同的配置起名字的。而如何告知 SpringBoot 使用哪段配置呢?可以使用如下配置来启用都一段配置

#设置启用的环境
spring:
  profiles:
    active: dev  #表示使用的是开发环境的配置

综上所述,application.yml 配置文件内容如下

#设置启用的环境
spring:
  profiles:
    active: dev
​
---
#开发
spring:
  profiles: dev
server:
  port: 80
---
#生产
spring:
  profiles: pro
server:
  port: 81
---
#测试
spring:
  profiles: test
server:
  port: 82
---

注意:在上面配置中给不同配置起名字的 spring.profiles 配置项已经过时。最新用来起名字的配置项是

#开发
spring:
  config:
    activate:
      on-profile: dev

1.2 properties文件

properties 类型的配置文件配置多环境需要定义不同的配置文件

  • application-dev.properties 文件是开发环境的配置文件。我们在该文件中配置端口号为 80
server.port=80
  • application-test.properties 文件是测试环境的配置文件。我们在该文件中配置端口号为 81
server.port=81
  • application-pro.properties 文件是生产环境的配置文件。我们在该文件中配置端口号为 82
server.port=82
  • SpringBoot 只会默认加载名为 application.properties 的配置文件,所以需要在 application.properties 配置文件中设置启用哪个配置文件,配置如下:
spring.profiles.active=pro

1.3 命令行启动参数设置

使用 SpringBoot 开发的程序以后都是打成 jar 包,通过 java -jar xxx.jar 的方式启动服务的。那么就存在一个问题,如何切换环境呢?因为配置文件打到的jar包中了。

我们知道 jar 包其实就是一个压缩包,可以解压缩,然后修改配置,最后再打成jar包就可以了。这种方式显然有点麻烦,而 SpringBoot 提供了在运行 jar 时设置开启指定的环境的方式,如下

java –jar xxx.jar –-spring.profiles.active=test

那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式

java –jar xxx.jar –-server.port=88

当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下

java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test

大家进行测试后就会发现命令行设置的端口号优先级高(也就是使用的是命令行设置的端口号),配置的优先级其实 SpringBoot 官网已经进行了说明,参见 :

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

进入上面网站后会看到如下页面

如果使用了多种方式配合同一个配置项,优先级高的生效。

二、配置文件分类

有这样的场景,我们开发完毕后需要测试人员进行测试,由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,如下

java –jar springboot.jar –-spring.profiles.active=test --server.port=85 --server.servlet.context-path=/heima --server.tomcat.connection-timeout=-1 …… …… …… …… ……

针对这种情况,SpringBoot 定义了配置文件不同的放置的位置;而放在不同位置的优先级时不同的。

SpringBoot 中4级配置文件放置位置:

  • 1级:resources/application.yml

  • 2级:resources/config/application.yml

  • 3级:target/application.yml

  • 4级:target/config/application.yml

说明:级别越高优先级越高

3级与4级留作系统打包后设置通用属性

1级与2级用于系统开发阶段设置通用属性

2.1 代码演示

2.1.1 环境准备

创建一个名为 springboot_06_config_fileSpringBoot 工程,,参考SpringBoot快速入门及起步依赖解析,目录结构如下

resources 下创建一个名为 config 的目录,在该目录中创建 application.yml 配置文件,而在该配置文件中将端口号设置为 81,内容如下

server:
  port: 81

而在 resources 下创建的 application.yml 配置文件中并将端口号设置为 80,内容如下

server:
  port: 80

2.1.2 验证1级和2级的优先级

运行启动引导类,可以在控制台看到如下日志信息

通过这个结果可以得出类路径下的 config 下的配置文件优先于类路径下的配置文件。

2.1.3 验证2级和4级的优先级

要验证4级,按照以下步骤完成

将工程打成 jar

点击工程的 package 来打 jar

在硬盘上找到 jar 包所在位置

  • jar 包所在位置创建 config 文件夹,在该文件夹下创建 application.yml 配置文件,而在该配合文件中将端口号设置为 82

在命令行使用以下命令运行程序

java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar

运行后日志信息如下

通过这个结果可以得出file: config 下的配置文件优先于类路径下的配置文件。

注意:

SpringBoot 2.5.0版本存在一个bug,我们在使用这个版本时,需要在 jar 所在位置的 config 目录下创建一个任意名称的文件夹

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

相关文章

  • Java编程实现深度优先遍历与连通分量代码示例

    Java编程实现深度优先遍历与连通分量代码示例

    这篇文章主要介绍了Java编程实现深度优先遍历与连通分量代码示例,
    2017-11-11
  • Spring中的父子容器原理解析

    Spring中的父子容器原理解析

    这篇文章主要为大家介绍了Spring中的父子容器原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • ShardingSphere-Proxy5搭建使用过程分析

    ShardingSphere-Proxy5搭建使用过程分析

    ShardingSphere-Proxy是跨语言的数据库代理服务端,主要用来处理:分表、分库、读写分离 等,这篇文章主要介绍了ShardingSphere-Proxy5搭建使用过程,需要的朋友可以参考下
    2022-10-10
  • 修改request的parameter的几种方式总结

    修改request的parameter的几种方式总结

    这篇文章主要介绍了修改request的parameter的几种方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 深入了解Spring的事务传播机制

    深入了解Spring的事务传播机制

    Spring事务传播机制是指,包含多个事务的方法在相互调用时,事务是如何在这些方法间传播的。本文通过示例详细介绍了Spring的事务传播机制,需要的可以参考一下
    2022-09-09
  • SpringBoot @GroupSequenceProvider注解实现bean多属性联合校验的示例代码

    SpringBoot @GroupSequenceProvider注解实现bean多属性联合校验的示例代码

    这篇文章主要介绍了SpringBoot @GroupSequenceProvider注解实现bean多属性联合校验,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • java动态代理实现代码

    java动态代理实现代码

    这篇文章主要介绍了java 动态代理的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下,希望能给你带来帮助
    2021-07-07
  • Java单表实现评论回复功能(多种实现方式)

    Java单表实现评论回复功能(多种实现方式)

    这篇文章主要介绍了Java单表实现评论回复功能,大家都知道评论功能有多种实现方式,本文逐一给大家详细讲解,需要的朋友可以参考下
    2023-03-03
  • Java这个名字的来历与优势

    Java这个名字的来历与优势

    Java是Sun公司开发的一种编程语言,Sun公司最初的方向是让Java来开发一些电器装置程序,Java名字的由来,实际上是一个有趣的故事。
    2014-10-10
  • MyBatis根据条件批量修改字段的方式

    MyBatis根据条件批量修改字段的方式

    这篇文章主要介绍了MyBatis根据条件批量修改字段的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论