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

网友投稿 247 2022-09-05

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

文章目录

​​多环境配置​​

​​使用yaml文件配置​​​​使用properties文件配置​​​​命令行启动参数设置​​​​多环境开发的兼容问题(Maven与SpringBoot)​​

​​配置文件分类​​

​​环境准备​​​​验证1级和2级的优先级​​​​验证3级和4级的优先级​​

多环境配置

以后在工作中,对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 ​​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: devserver: port: 80---#生产spring: profiles: proserver: port: 81---#测试spring: profiles: testserver: port: 82---

注意:

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

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

使用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​​ 官网已经进行了说明,参见 :

==

接下来我们尝试用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.yml2级:classpath:config/application.yml3级:file :application.yml4级:file :config/application.yml

说明:级别越高优先级越高1级与2级留做系统打包后设置通用属性 3级与4级用于系统开发阶段设置通用属性

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

环境准备

创建一个名为 ​​springboot_06_config_file​​​ 的 ​​SpringBoot​​ 工程,目录结构如下

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

server: port: 81

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

server: port: 80

验证1级和2级的优先级

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

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

验证3级和4级的优先级

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

java -jar springboot_06_config_file-0.0.1-SNAPSHOT.jar

运行后日志信息如下

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:休克文案:东京奥运,16个超级品牌上场!
下一篇:[MyBatisPlus]标准数据层开发(CRUD、分页)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~