profiles.active多环境开发、测试、部署

news2024/10/5 15:31:12

1、使用场景

在开始讲profiles.active配置时,我们先来考虑几个场景。

我们在开发过程中,经常会碰到多个环境,特别熟数据库,经常是有开发库,测试库,和生产库。一般我们都是连的开发库进行开发,但是有时候也会需要连接测试库,甚至是生产库进行调试工作。我们通常的做法,可能就是直接修改配置文件的数据库连接,需要连哪个库就改成哪个库的连接。可是有些时候我们改来改去经常出错,或者不记得哪个环境的配置了,这时我们可能会想到一次把几个环境的配置都写进来,把不需要的注释掉,这确实是一种可行的办法,但还有没有更好的办法呢?

再说部署时候的场景。一般我们打包里面包含的都是开发库的配置文件,经常部署的时候,需要手动修改部署包里面的配置文件,如果部署到测试环境,就修改成测试环境的数据库,如果是生产环境,就修改成生产环境的数据库。那么有没有办法让一个部署包能同时适配各种不同的环境呢。

接下来我们要讲的profiles.active就可以解决上面的需求。

2、profiles.active

profiles.active表示当前激活的环境参数,他可以是一个字符数组,但一般情况下,我们都是使用单个字符,例如dev,test,prod来标识。这里我们还是以数据库配置为例,假设我们原来的application.yml里面配置的数据源是本地数据源,现在我们再来配置一个开发库,以dev作为环境标识。

我们将application.yml复制一份,命名为application-dev.yml,application-{profile-name}.yml,命名规则就是这样的。然后我们把dev里面的数据库名改成spring_boot_study_dev,其他不用的配置删掉。

这就完成了我们开发环境的配置文件编写。

接着,我们再来一份测试环境的配置。

这里,我们已经完成了多个环境配置文件的编写。可以看到,不同环境的配置我们写在不同的配置文件里面,相同的配置我们使用application.yml里面的配置,可以认为是默认配置。我们还差最后一步,使用profiles.active来激活我们当前的需要使用的环境。

3、profiles.actvie使用

profiles.active配置的方式也有几种,我们从最简单的开始。我们可以在application.yml里面直接配置spring.profiles.active属性。

这样我们就指定了当前的环境变量,现在我们来启动程序。

我们可以看到日志里面打印了当前profiles active 是dev,说明我们的配置生效了,其实我们后面还可以看到程序并没有启动完成,因为我们并没有创建spring_boot_study_dev这个数据库,这正好再一次证明我们的配置已经生效。

其实在我们以前没有配置profiles.active时,默认激活的是default。

现在我们可以通过修改spring.profiles.active属性来快速的切换环境了。这里笔者要再次提醒一下大家,当我们配置成dev的时候,我们的程序是会读取application-dev.yml和application.yml两个配置文件,spring会将两个配置文件里面的配置进行一个合并,如果两个文件里面有相同的配置项,将会以application-dev.yml里面的优先级为高,即dev里面的配置将会覆盖默认的配置。

除了改配置文件,我们还可以在eclipse指定环境变量

通过配置环境变量,同样能生效,并且,如果在环境变量和配置文件同时配置了的情况下,环境变量的优先级会高于配置文件。

这两种修改spring.profiles.active的方式是开发时常用的,但是他并不能解决我们部署时候的问题。

假设我们是使用jar包运行,我们可以在执行java -jar命令的时候增加-Dspring.profiles.active=test参数的方式指定环境。

这种配置方式,跟我们修改eclipse环境变量的原理是一样的。这样只要我们部署包里面包含了各个环境的配置,我们就可以一个部署包直接在多个环境使用,只需在启动的时候指定环境名即可。

那如果是Tomcat部署的war包怎么处理呢。这里以linux版本为例,找到catalina.sh文件,修改JAVA_OPTS参数,增加我们需要配置的环境变量,这样只要这个Tomcat里面部署的应用,spring.profiles.active值都是同一个值。

4、总结

这节主要讲如何使用profiles.active这个变量,让我们在开发过程快速切换环境配置,以及如何使一个部署适配各种不同的环境。如果我们的部署包可以不用修改配置文件,就直接运行,这就为我们以后的自动部署,自动运行扫清了路障。不过,有一点需要注意的是,我们将多个环境的配置都放到了部署包,会不会存在将其他环境的敏感配置项泄露给了其他人的情况。

代码:

https://github.com/www15119258/springboot-study/tree/branch37


 

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

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

相关文章

四两拨千斤,训练大模型的PEFT方法

自然语言处理进入大语言模型(Large Language Model, LLM)时代之后,模型的参数量级越来越庞大,以稍早之前的GPT-3为例,它有175B即1亿7千5百万参数,而ChatGPT及后续模型则更大。一方面大语言模型解决自然语言…

用html+javascript打造公文一键排版系统4:一级标题排版

完成公文标题的排版后,我们要进行对正文中的标题进行处理。 一般正文中的标题分为四级,文中结构层次序数依次可以用“一、”“(一)”“1.”“(1)”标注;一般第一层用黑体字、第二层用楷体字加粗…

10.25UEC++/小试牛刀(笨鸟先飞案例)

1.思路整理: 如何入手? 角色可能是每个游戏的最重要的部分,所以一般可以先从角色入手,如果游戏很复杂,可以进行拆分设计。 蓝图创建地图: 创建默认Pawn: 编写GameMode默认构造函数:…

第二十二章:逻辑架构

第二十二章:逻辑架构 22.1:逻辑架构剖析 服务器处理客户端请求 ​ MySQL是典型的C/S架构,即Client/Server架构,服务端程序使用的mysqld。不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是&#…

VoLTE信令流程

文章目录 VoLTE概述VoLTE 协议栈IMS(IP Multimedia Subsystem),IP多媒体子系统会谈边界控制器(Session Border Controller, SBC)QCI (QoS Class Identifier),QoS类标识符 SIP(Session initialization Protocol&#xf…

Android mac 交叉编译与ffmpeg编译踩坑记 (v7a 与 v8a and 动态库与静态库)

Android mac 交叉编译与ffmpeg编译踩坑记 环境: system: mac NDK: android-ndk-r17c Fffmpeg: ffmpeg-4.0.2 Cmake: 3.10.2 Gradle: 4.1.3 tips: 本文记录踩坑过程,具体细节如果感兴趣可以在评论区留言交流讨论! mac 编译 (动态库(so)) 首先来回顾一下,mac原始库是如何…

Redis常见命令和使用示例

目录 1.使用官方文档学习redis 2.核心命令 SET GET 3.全局/通用命令 KEYS EXISTS DEL EXPIRE TTL TYPE 1.使用官方文档学习redis redis官网 点击搜索,输入,比如输入ping,会显示Commands,是一个命令,点击ping&#xff…

新版2021等启动unity包管理器本地服务器进程失败解决

1、问题 2、解决办法 最后我发现每个unity版本都有一个包管理器,也就是图中的路径,而且都是相同的路径,只是因为版本不同或多或少存在一些小差异,其他版本可以正常启动,就2021不行会不会是2021的包管理器这个文件夹出…

YOLOv5 实现 10 种热力图可视化方式教程

效果展示 GradCAMEigenCAMEigenGradCAMGradCAMElementWiseGradCAMPlusPlusHiResCAMLayerCAM

前端下载PDF内容空白且大小偏大问题解决

前端使用React框架axios请求后端接口下载文件,请求返回正常但文件大小和内容异常。经排查,其原因是使用了mockjs用作数据模拟,导致了请求异常,将其注释掉后,文件大小与内容恢复正常。 目录 1.文件异常 2.定位问题 3…

【C语言进阶技巧】指针解密:炼金术士的秘密面试题揭秘

【C语言进阶技巧】指针解密:炼金术士的秘密面试题揭秘 1. 主要涉及sizeof与strlen函数的使用的笔试题1.1 笔试题一(一维整形数组)1.2 笔试题二(不带\0的字符数组)1.3 笔试题三(带\0的字符数组)1.4 笔试题四 &#xff0…

【C#】默认打开图片、文件下载

系列文章 【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:h…

Linux(centos7)系统关闭 virbr0

背景: 在使用 VMware 虚拟机安装 centos7 操作系统中,经常出现将 IP 地址分配到虚拟网桥接口virbr0 上,引起虚拟机不能正常访问网络的问题。 我是在学习 docker 网络分析这块遇到的问题,教程上在虚拟机上输入 ip addr 并没有出现 …

linux开发工具:repo

1:repo简单介绍 repo是Google开发的用于管理Android版本库的一个工具,它是由一系列的Python脚本组成,封装了一系列的Git命令,用来统一管理多个Git仓库。repo不是用于取代git,而是简化了对多个Git版本库的管理。 repo…

6 种方式读取 Springboot 的配置(原理+实战)

从配置文件中获取属性应该是SpringBoot开发中最为常用的功能之一,但就是这么常用的功能,仍然有很多开发者在这个方面踩坑。 我整理了几种获取配置属性的方式,目的不仅是要让大家学会如何使用,更重要的是弄清配置加载、读取的底层…

搭建Promethues + grafana +alertManager+blakbox 监控springboot 健康和接口情况

一。概述 架构图: 拓扑图: prometheus 是一个开源系统,用于构建监控和报警的工具包。 Prometheus 收集其指标并将其存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。 特点&#…

003.PADS VX2.4选项设置及显示颜色设置

文章目录 一、PADS颜色设置及选项设置二、选项设置1.全局2.设计3.栅格和捕获4.显示5.布线选项页6.覆铜平面选项页7.文本和线选项页8.文本和线选项页9.过孔样式选项页 一、PADS颜色设置及选项设置 一、颜色设置 1.点击设置—显示颜色)(快捷键…

Kkfileview | Docker | 文件预览kkfile配置

文章目录 简介DockerRedis部署 简介 kkFileView为文件文档在线预览解决方案,该项目使用流行的spring boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等 …

SQLSERVER 临时表 和 表变量 有区别吗

一:背景 1. 讲故事 今天和大家聊一套面试中经常被问到的高频题,对,就是 临时表 和 表变量 这俩玩意,如果有朋友在面试中回答的不好,可以尝试看下这篇能不能帮你成功迈过。 二:到底有什么区别 1. 前置思…

十五、flex弹性元素的样式

目录&#xff1a; 1. 基本布局 2. 弹性元素的属性&#xff1a;flex-grow 3. 弹性元素的属性&#xff1a;flex-shrink 4. 弹性元素的属性&#xff1a;flex-basis 5. flex 统一设置这3个属性&#xff08;常用&#xff09; 6. order 一、基本布局 <style>*{margin: 0;paddin…