SpringBoot——多环境开发

news2024/11/24 12:27:01

简单介绍:

在我们的开发过程中,我们的程序开发分为几个基本的阶段,比如开发阶段,调试阶段,运行阶段,在不同的阶段可能需要有不同的配置文件去对我们的项目做配置,那么要如何在不同的环境中配置不同的配置信息并使用,这就需要用到了多环境开发。

编写格式:我们以YAML格式的配置文件进行介绍

1、将多环境配置写在同一个配置文件中:

上图中展示的就是将多环境的配置,首先,多个环境之间使用”---“隔开,上面展示的环境有三个,其中最上面的环境一般为默认环境,默认环境中一般会配置一些公共属性,也就是所有的环境都会用到的属性。使用sprin.profiles属性指定环境的名字,这个环境的名字是环境的唯一标识,在我们启用环境的时候就是通过这个属性的属性值来找到我们要启用那一套环境。然后我们就可以在不同的环境中配置不同的配置项,在默认环境中,我们要通过spring.profiles.active属性指定要启用的环境的唯一标识,如果这个地方不指定,则默认启动默认环境。

根据上图可以看出来,我配置了三套环境,除了最上面的默认环境,还有两个我们自己配置的环境,分别是dav环境和pro环境,三套环境唯一的区别就是服务器的启动端口不同,所以我们在演示切换不同和环境配置的时候就可以根据端口来观察我们启动的是那一套环境。

首先,我们不在默认配置中启用任何的环境,也就是说当前我们启动的配置文件如下所示:

然后我们启动程序,服务器的端口应该是80端口,我们来观察是否正确:

 可以看到,我们的服务器确实在80端口启动了,然后我们切换环境到dav环境,切换环境的方法就是将spring.profiles.active的值修改成对应环境的唯一标识即可:

那么根据dav环境的配置,我们的服务器应该在82端口启动,我们观察服务器的启动端口即可确定我们的环境是否切换成功:

可以看到首先,我们的服务确实在82端口启动了,并且在上面还有一个地方,说明我们启用了一个名字叫做dav的环境配置,这样就说明我们的环境配置的切换就完成了。

2、将多环境配置写在多个配置文件中

之前我们介绍的都是将多个环境配置写在同一个配置文件中,但是当多个配置文件中的配置项开始变多,尤其是这些不同的环境的属性相同只不过是值不相同就和容易弄混,导致不好管理。那么我们就可以将不同的环境配置写在不同的配置文件中,一个文件就表示一个环境,这样就更方便我们的管理。

首先我们将我们之前写的两个环境拆分成不同的配置文件:

注意我这里的文件名:application-xxx.yml,这里需要着重说一下文件名,因为我们在配置文件中并没有标注环境的唯一标识,那么文件的后缀,也就是xxx的部分就是我们环境的唯一标识,当我们想要启动这个配置文件的时候,使用它来定位唯一的环境变量,比如我们要启动application-dav.xml这套环境,那么我们就需要将spring.profiles.active的值修改成dav:

 可以看到,确实是从我们在application-dav.yml中配置的端口启动了服务,并且上面也出现了使用dav环境的标识,现在我们再来换一下,启动 pro环境:

 这时候就变了, 变成我们在application-pro.yml中配置的端口启动了,那么就说明我们的配置是正确的。

3、在配置文件中引入其他的配置文件 

除了将不同环境的配置封装成单独的配置文件,那么有时候单个的环境配置中的配置项太多了,能不能也单独分出来进行更详细的区分呢?肯定是可以的,我们可以根据我们使用的技术将同一种技术的配置写在同一个配置中:

比如我们可以把跟Redis的相关技术的配置写在application-davRedis,这样就表示这是在dav环境下的Redis配置文件,就像是上图中我写入了三个配置,那么我们要如何引用呢?

我们在默认的配置文件中将我们之前写的多个分散的配置文件,通过include属性的方式引入进来,首先配置文件要放在同一个目录下,在写的时候,完整的文件名是application-davRedis.yml,我们可以简化成去掉application-,和后缀,也就是只写davRedis的形式。

并且在我们启动的时候,我们的配置文件的引用也会打印在日志上:

注意这里的配置文件的加载顺序,他和我们的书写顺序是有关系的, 我们书写的越靠后,在加载的时候也会靠后加载,最后一个是我们的环境配置。那么越靠后加载的配置文件,如果其中含有与前面的配置文件中冲突的部分,靠后的配置值会覆盖前面的配置值,当然我们的主环境配置文件时最后加载的,所以如果前面有与我们的主环境配置文件中冲突的配置项,最终都会被主环境配置中的的配置值覆盖掉。

4、新特性,使用group代替include

在之前我们将配置文件分成了主环境配置文件,以及其他的第三方技术配置文件。但是主环境配置文件和第三方技术配置文件的关联性不高,比如我们的第三方技术配置文件完全是根据文件名来区分他是在什么环境下使用的。并且如果我们要修改数据,除了要修改active的值,在下面引入的时候使用的include的值也要同时修改,就加大了我们的代码书写量。

那么有没有一个操作可以让我们把主环境配置文件和我们的第三方技术配置文件分个组,让我们在启动主环境配置文件的时候,自动将同一个环境配置下的其他第三方技术配置文件同时引入,肯定是有的。

在SpringBoot的2.4版本之后,我们可以使用group代替include来帮我们将要导入的配置文件进行分组:

可以看到,我们使用这个标签将dav属性和其同一环境下的所有的第三方技术的相关文件进行分组,当我们选择使用某一个环境之后,他会将主环境配置文件加载进来,并且将分组中对应环境的第三方技术配置文件同时加载进来。

那么在使用这种形式的时候,我们要注意,要保证你主环境配置文件的唯一标识,也就是application-dav.xml中的dav,与我们的分组中的分组名dav要保持一致,并且active的值也要是dav才能顺利的加载所有的配置文件:

只要保证这三个值都相等,那么对应的配置文件就会被顺利的导入,我们来看运行结果:

 注意这里的运行结果,我们会首先加载主配置文件,然后是剩下的第三方技术的配置文件,并且第三方配置文件的加载顺序与我们的书写顺序相关。这里就需要注意,第三方技术配置文件中的属性值不要覆盖掉我们的主环境配置文件中的属性值。

5、环境冲突 

除了SpringBoot中有环境这个概念,在Maven中其实也存在一个环境的概念,这是属于Maven的知识,我们并不展开说明,只是如果遇到我们在SpringBoot中配置环境没有生效的时候,考虑是否是因为SpringBoot的环境与Maven的环境配置冲突了,如果真是的是冲突了,那么此时我们的SpringBoot将沿用Maven的环境配置。

原因很简单,我们的SpringBoot导入依赖,配置默认值,这些所有的让我们开箱即用的配置和特性都是依赖Maven完成的,所以也就是说我们的SpringBoot是依赖Maven进行构建的,所以让配置发生冲突的时候肯定是沿用Maven的配置。

可以通过在Maven中使用compile配置环境让Maven和SpringBoot的环境统一解决环境冲突问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言:数组定义方式

一、数组简介 <1>前言 大家首先来思考一个问题&#xff0c;若是我们想要定义两个变量&#xff0c;求这两个数的平均数&#xff0c;该怎么求呢&#xff1f; 例如&#xff1a;int a 10,b 20 int average (a b) / 2; 上面的公式&#xff0c;我相信大家应该很快就能够求出…

牛奶蛋白过敏VS乳糖不耐受,看完这篇终于分清了

乳糖不耐受 乳糖不耐症的主要表现为一些胃肠道症状&#xff0c;有腹部紧张、肠鸣、腹痛、排气和腹泻等症状。如出现这些症状都是乳糖不耐受症的表现之一&#xff0c;但患有乳糖不耐的个体症状差异很大&#xff0c;而严重的乳糖不耐受多于摄入一定量乳糖后30min至数小时内发生。…

Python安装教程2023(小白专用)已验证

第一次接触Python&#xff1f;下面从一个完全不懂的Python 的小白来安装Python 等一系列工作的记录&#xff0c;并且遇到的问题也会写出&#xff0c;让完全不懂的小白也可上手安装&#xff0c;并且完成第一个Hello world代码。 [Python 安装] 目前&#xff0c;Python有两个版本…

【手机建站】Android Termux+cpolar内网穿透,搭建外网可以访问的网站

文章目录 概述1.搭建apache2.安装cpolar内网穿透3.公网访问配置4.固定公网地址5.添加站点 概述 Termux是一个Android终端仿真应用程序&#xff0c;用于在 Android 手机上搭建一个完整的Linux 环境&#xff0c;能够实现Linux下的许多基本操作&#xff0c;不需要root权限Termux就…

Word怎么转换成PDF免费?分享适合你的Word转PDF方法

随着数字化时代的到来&#xff0c;将文件转换为PDF格式已经成为一个常见的需求。PDF文件格式的广泛应用使其在各个领域都非常重要&#xff0c;而Word文档则是最常见的文件类型之一。因此&#xff0c;将Word转换为PDF的方法备受关注。在下面&#xff0c;我将分享一种适合任何人使…

基于ARIMA-CNN-LSTM预测模型研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

大数据服务之linux中安装hadoop

安装hadoop之前&#xff0c;必须要先有jdk。所以jdk 在linux环境中配置java全局变量 第一步&#xff0c;下载 下载地址&#xff1a;Index of /dist/hadoop/common/hadoop-3.1.3 第二步&#xff0c;解压 tar -zxvf hadoop-3.1.3.tar.gz 第三步&#xff0c;获取文件路径 pw…

站的更高一点看分布式系统中的复制

复制意味着在通过网络连接的多台机器上保留相同数据的副本。 我们希望能复制数据&#xff0c;可能出于各种各样的原因&#xff1a; 使得数据与用户在地理上接近&#xff08;从而减少延迟&#xff09;即使系统的一部分出现故障&#xff0c;系统也能继续工作&#xff08;从而提…

网络带宽管理

网络某一部分的带宽使用过多&#xff0c;可能会影响整个网络的性能&#xff0c;带宽问题甚至会影响业务关键型服务并导致网络停机。在企业中保持稳定的网络性能可能具有挑战性&#xff0c;因为采用数字化的网络可扩展性和敏捷性应该与组织的发展同步。随着基础设施的扩展、新应…

flask+p5.js 网页开发 pycharm mac环境

flask 学习参考视频&#xff1a; 2023版-零基础玩转Python Flask框架-学完可就业 一、安装 需要安装的&#xff1a; python、flask、pycharm mysql、Navicat&#xff08;这两个不用数据库可以不用安装&#xff09; 1、python3.0以上安装 下载地址 下载以后终端输入python3 …

Vue入门学习笔记(1)

这里写目录标题 一、安装工具二、前置设置2.1 淘宝加速2.2、华为云加速 三、安装vue工具3.1 安装vue/cli3.2 安装vite 四、创建项目4.1 使用vue/cli创建4.2 使用vite创建 一、安装工具 首先须安装以下工具&#xff1a; vscode&#xff08;如果下载慢的话建议使用360安装&…

select

1. select模型 2. select()函数 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);fd_set类型 readfds和writefds, exceptfds的类型都是fd_set,那么fd_set类型是什么呢&#xff1f; fd_set类型本质是一个位图&#xff0…

Word怎么生成目录?4个方法快速生成目录!

案例&#xff1a;Word怎么生成目录 【想问下大家在使用Word时是怎么生成目录的呀&#xff1f;正在写毕业论文的我真的很急&#xff01;感谢&#xff01;】 Word作为我们常用的办公软件&#xff0c;为我们的提供了很多便利。生成目录是在Word文档中创建一个方便导航的索引。 …

Go语言基于Viper封装实现

基于Viper的封装 Viper是什么 Viper是一个用于Go语言应用程序的配置管理库。它提供了一种简单而灵活的方式来处理应用程序的配置&#xff0c;支持多种格式的配置文件&#xff0c;并提供了一组API来读取和使用这些配置。 Viper支持多种配置文件格式&#xff0c;包括JSON、TOML、…

C learning_14 指针篇之破解版

目录 1. 指针是什么 指针变量 2. 指针和指针类型 那指针类型的意义是什么&#xff1f; 3. 野指针 规避野指针 4. 指针运算 指针-整数 指针-指针 指针的关系运算(比较指针的大小) 5. 指针和数组 6. 二级指针 7. 指针数组 1. 指针是什么 指针是C语言中一种非常重要的…

2023年美国大学生数学建模竞赛E题光污染解题全过程文档及程序

2023年美国大学生数学建模竞赛 E题 光污染 原题再现&#xff1a; 背景   光污染被用来描述任何过度或不良地使用人造光。我们所说的一些光污染现象包括光侵入、过度照明和光杂波。在大城市&#xff0c;这些现象最容易被观测到的是太阳落山后天空中的一道辉光; 然而&#xf…

网课录屏怎么录?分享3个录制网课方法!

案例&#xff1a;怎样才能录制清晰流畅的网课视频&#xff1f; 【我最近在网上购买了一个配音的课程&#xff0c;每天晚上8点老师会进行讲课&#xff0c;但是课程没有回放。我想通过录屏的方式将课程内容录制下来&#xff0c;那怎样才能录制清晰流畅的网课视频呢&#xff1f;】…

初识Mybatis -- Mybatis入门保姆级教程(一)

文章目录 前言一、认识mybatis1.mybatis是什么2.jdbc缺点3.mybatis优点4.MyBatis框架解决JDBC劣势 二、mybatis入门案例1.需求分析与操作步骤2.创建表tb_user、实体类和Mapper接口3.创建maven模块re_mb_demon4.在pom.xml配置文件中导入相关依赖5. 配置相关文件6.创建并编写模拟…

百汇BCR:十个外汇交易常见问题解析

外汇交易是一种受到市场欢迎的投资方式&#xff0c;参与交易很容易&#xff0c;但想要盈利却很难。特别是一些细节问题容易被忽略&#xff0c;百汇BCR小编整理了十个外汇交易常见问题供有需要的投资者借鉴学习。 问题一、外汇开户需要哪些资料&#xff1f; 个人相关信息资料、…

重新理解RocketMQ Commit Log存储协议

最近突然感觉&#xff1a;很多软件、硬件在设计上是有root reason的&#xff0c;不是by desgin如此&#xff0c;而是解决了那时、那个场景的那个需求。一旦了解后&#xff0c;就会感觉在和设计者对话&#xff0c;了解他们的思路&#xff0c;学习他们的方法&#xff0c;思维同屏…