[SpringBoot]配置文件②(多环境配置,配置文件分类)

多环境配置

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

在这里插入图片描述

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

使用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

使用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

命令行启动参数设置

使用 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

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

在这里插入图片描述

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

这里有几个注意点:
①在给项目打包之前先使用clean命令,特别是在上一次的结果影响本次的操作时。
clean的本质就是:该命令会删除项目路径下的target文件,但是不会删除本地的maven仓库已经生成的jar文件
在这里插入图片描述
②我们的配置文件中偶尔有可能写中文(注意我说的是配置文件),这样可能造成打包失败,我们要在filecoding中,将设置改成如下图所示:
在这里插入图片描述

多环境开发的兼容问题(Maven与SpringBoot)

我们前面在Maven中也提到过多环境开发,既然这样如果maven中配置有多环境开发,springboot中也配置有多环境开发,那他们两个谁做主呢?

就比如说你maven中配置的是以开发环境为主,springboot中配置的是以测试环境为主,那么我们启动项目的时候,究竟启动的是哪一个环境?

我们可以思考一个问题,最终我们的springboot工程是在服务器上启动,再说的直白点,我们最终启动是那个打好了的jar包。而这个jar是maven帮我们做的(执行package命令之后得到),所以我们可以知道maven里面的profile应该是启主导作用的,而我们boot里面的多环境开发仅仅相当于maven打包过程中的工具。

所以:maven为主,boot为辅
在这里插入图片描述

接下来我们尝试用maven控制版本,用boot加载maven中设置的版本。

步骤一:Maven中设置多环境属性
在这里插入图片描述
步骤二:SpringBoot中引用Maven属性
在这里插入图片描述

当我们最终启动的时候效果如下:
在这里插入图片描述

如果就这样子去打包还是不会成功的,因为你此处的占位符不会被解析,我们要扩大解析的范围,所以说:

步骤三:对资源文件开启默认占位符的解析
在这里插入图片描述

如此才能完成解析:
在这里插入图片描述

配置文件分类

在这里插入图片描述

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

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级:classpath:application.yml
  • 2级:classpath:config/application.yml
  • 3级:file :application.yml
  • 4级:file :config/application.yml

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

1级与2级留做系统打包后设置通用属性
3级与4级用于系统开发阶段设置通用属性

我们演示一下他们的优先级:

环境准备

创建一个名为 springboot_06_config_fileSpringBoot 工程,目录结构如下

在这里插入图片描述

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

server:
  port: 81

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

server:
  port: 80

验证1级和2级的优先级

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

在这里插入图片描述

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

验证3级和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 目录下创建一个任意名称的文件夹

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 这是一个Spring配置文件中的一行代码,意思是激活了名为“dev”的配置文件。在Spring中,可以使用不同的配置文件来适应不同的环境,例如开发环境、测试环境和生产环境等。通过设置不同的配置文件,可以轻松地切换不同的环境,以便在不同的环境中使用不同的配置。 ### 回答2: Spring是一个非常流行的Java企业级开发框架,能够让开发者更加方便高效地开发Web应用程序。在使用Spring时,我们可以通过在配置文件中设置profile的方式来实现不同环境下的应用程序配置,这其中就包括了spring.profiles.active=dev这一设置。 dev代表的是开发环境,即我们在进行软件开发时所使用的环境。在这种环境下的配置文件中,我们可以设置各种调试信息,如日志级别、SQL执行次数等等,以方便我们进行调试。开发环境的配置文件一般不包含线上环境所需要的特定设置,如缓存服务器地址等等。 当我们将应用程序部署到测试或者生产环境时,我们需要修改profile的值,以匹配当前所处的环境。例如,我们可以将spring.profiles.active设置为test或者prod,以分别对应测试和生产环境。测试和生产环境的配置文件中,我们需要设置与开发环境不同的参数,如数据库地址、Redis集群等等。 在实际开发中,我们可以使用Maven或者Gradle等工具来快速地自动生成与当前环境匹配的配置文件。例如,在Maven中,我们可以定义多个profile,每个profile都包含一个与其对应的配置文件。在真正进行部署时,我们只需要指定当前使用的profile,Maven就会根据该profile的定义来进行打包。这种方式能够有效地减少错误,提高部署效率,是Spring应用程序开发中非常重要的一部分。 ### 回答3: Spring 是一种基于 Java 平台的开源应用框架,它可以帮助开发者更快地开发高质量的应用程序。Spring 提供了众多的功能模块和组件,使得开发者可以更加轻松地编写可重用的代码,并且理解不同模块之间的协作关系。其中,Springprofiles: active: dev 是如何使用和应用的呢? 首先,profilesSpring 中的一个非常重要的概念,它用于描述在应用程序运行时应该使用哪种配置。在 Spring 应用程序中,我们可以定义多个 profiles,每个 profile 都对应着一组特定的应用程序配置。不同的 profile 中可能包含不同的 bean 定义、属性值,甚至可能包含不同的应用程序代码。 接着,activeprofiles 的一个属性,并且它的值为 dev。这意味着在当前运行的 Spring 应用程序中,将会使用名为 devprofile。这个 dev profile 可能包含了一些用于开发环境的特定配置,例如开启 debug 模式、使用本地数据库等等。在不同的应用程序阶段,我们可以切换到不同的 profile 中,以满足不同的需求。 那么,如何为 Spring 应用程序配置 active profile 呢?有多种方式可以实现。例如,我们可以在应用程序的配置文件(如 application.properties)中添加一条语句:spring.profiles.active=dev。这样,当应用程序启动时,它就会使用名为 devprofile。 总的来说,Springprofiles: active: dev 可以为我们提供更加灵活的应用程序配置方式。不同的 profile 可以用于不同的环境和阶段,使得我们的应用程序更加适应不同的需求和场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十八岁讨厌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值