SpringBoot【三】多环境切换,实例演示

一、前言

        实际的项目开发中,一个项目通常会存在多个环境,例如,开发环境、测试环境和生产环境等。不同环境的配置也不尽相同,例如开发环境使用的是开发数据库,测试环境使用的是测试数据库,而生产环境使用的是线上的正式数据库。

        所以问题来了,每次发布测试环境或者上生产,配置环境怎么配置?对吧?不要急,springboot都帮我们做了,我们只需要会使用profile就好!

        早在Spring3.1版本时,profile就已经出来了。profile 是什么?它就是可以让 Spring 对不同的环境提供不同配置的功能,可以通过激活、指定参数等方式快速切换环境。

简言之:就是我们需要在不同的场景下使用不同的配置,profile就是为解决我们多环境下切换配置复杂的问题而诞生的。

二、如何使用profile?

Spring Boot 的配置文件共有两种形式:.properties 文件和 .yml 文件,不管哪种形式,它们都能通过文件名的命名形式区分出不同的环境的配置,文件命名格式为:

application-{profile}.properties/yaml

其中,{profile} 一般为各个环境的名称或简称,例如 dev、test 和 pro 等等。如下我们就直接使用yaml配置文件格式来做演示:

yaml 配置

在 demo项目下 的 config文件夹 下添加 如下4 个配置文件:

  • application.yaml:主配置文件
  • application-dev.yaml:开发环境配置文件
  • application-test.yaml:测试环境配置文件
  • application-pro.yaml:生产环境配置文件

在 application.yaml 文件中,指定默认服务器端口号为 8080,并通过以下配置激活开发环境(dev)的 profile。

未指定环境时,启动项目,你们可以看到控制台打印如下:

No active profile set, falling back to default profiles: default

看我圈起来的内容,很明显是有口子可以进行配置的。那应该得如何使用呢?别着急,往下看。

我们来做个试验吧,我们在核心配置文件application.yaml中设置属性。spring.profiles.active=dev,再启动程序,发现application-dev.yaml被激活了,启动端口号也修改为子配置文件设置的端口号。

看控制台打印,测试可知:

很明显可以看到dev环境已经启动了。

有小伙伴可能会不相信,该不会是巧合吧,那我再给大家做个试验,这次在test环境中配置端口为8090,再请大家看结果会是怎样?

application-test.yaml 内容设置如下:

server:port: 8090

application.yaml 内容设置如下:

spring:profiles:active: test

最终它到底能否启动项目成功并且运行8090端口呢?还是运行未指定环境的8080端口呢?接着往下看;

ok!大家请看,确实是运行的tests环境配置。如此,便证实在两次application.yaml测试中使用profileh成功动态切换配置。

上述介绍的主要是配置方式动态切换,而切换方式就是通过配置文件的spring.profiles.active属性实现,那还有没有别的启动方式呢?别着急,肯定有,看下边,bug菌都给大家总结好了,可得好好学哈~

如下两种激活配置文件的方式:

profile激动方式配置文件:
在配置文件中配置:spring.profiles.active = dev(如上已经做了演示)虚拟机参数配置:在VM options指定:-Dspring.profiles.active = dev
命令行参数配置:java -jar xxx.jar  --spring.profiles.active = dev

然后就是.properties文件配置方式也跟.yaml是一样的,此处就不一一赘述啦。各位小伙伴大可自行尝试,产生任何疑惑的地方都可下方直接留言哦~bug菌一定不留余力的帮助大家。赠人玫瑰,手有余香。

接下来 我就为大家介绍及使用剩下的两种激活配置的方式

三、虚拟机参数方式配置

在idea开发工具中打开RunDebug Configurations界面;然后在VM options一行中指定;

-Dspring.profiles.active=dev

说明:指定是dev环境;dev换成别的环境也可。就=后边改成别的环境即可。

application-dev.yaml

server:  port: 8100

项目启动一切正常。说明VM参数配置动态切换环境可行。

四、命令行参数配置

先是将我们的demo项目打成一个jjar包

先教下大家怎么使用idea打jar包吧,其实很简单,看如下步骤瞬间就可以学会。

[INFO] BUILD SUCCESS

 

打印出了 success ,说明jar打包成功;

接着我们找到jar的位置;看如下图:是存到了target根目录下

然后选中该jar文件,右键单击打开面板选择Show in Explorer 即可跳转到该文件位置上,

如下已经是找到了该文件存放位置,接着直接在目录上输入cmd回车,即可打开小黑框。

在小黑框里执行如下命令,看看能否运行成功呢?咱们拭目以待;

java -jar demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=test

说明:--spring.profiles.active=test 为激活测试环境(test)Profile 的命令行参数。

运行结果如下:

ok,完美,成功运行!证明命令行参数配置也可动态切换环境。

至于大家如何选择,这就看你的实际需求啦!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node.js创建Express项目安装express-generator报错

一、在我进行Node.js项目开发时,使用Express框架构建一个Express项目,时报错: npm warn deprecated mkdirp0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has change…

在 .NET 9 中让您的 OpenAPI(Swagger)文档 UI 变得出色

从 .NET 9 开始,默认模板中不再包含 Swagger UI webapi。虽然文档仍然包含在内,但现在通过调用MapOpenApi,UI 不再存在。很高兴,重新获得文档 UI 相对容易。但 UI 本来就很无聊,所以让我们来点更花哨的东西吧&#xff…

使用Kimi开发自己的问答应用

概述 Kimi是大家常用的一个人工智能助手,本文使用Kimi开发文档,以node作为后端,开发与一个问答系统 实现效果 Kimi简介 Kimi是由Moonshot AI开发的人工智能助手,擅长中文和英文对话。目标是帮助用户解决问题、提供信息和执行任…

2024.12.09标准IO(作业)

1、使用这fscanf和fprintf两个函数实现文件的拷贝。 #include <myhead.h>int main(int argc, const char *argv[]) {//使用这fscanf和fprintf两个函数实现文件的拷贝FILE *fp1 fopen("./1.txt","r"); //打开被拷贝的文件1.txtif(NULL fp1){perror…

JK软考小程序上线啦

经过一段时间的题库整理和录入&#xff0c;JK软考小程序终于和大家见面了&#xff01; 扫描识别赶紧体验吧&#xff1a; JK软考是一款专门为准备软考的考生设计的移动学习工具。JK软考集成了丰富的软考题目资源&#xff0c;通过便捷的操作界面和多样化的功能&#xff0c;帮助考…

40分钟学 Go 语言高并发:负载均衡与服务治理

负载均衡与服务治理 一、知识要点总览 模块核心内容技术实现难度负载策略轮询、权重、最小连接数自定义负载均衡器中服务降级服务降级、熔断降级、限流降级Hystrix模式高熔断机制熔断器状态机、失败计数、自动恢复Circuit Breaker高限流设计令牌桶、滑动窗口、计数器Rate Lim…

LLMs之Agent之Lares:Lares的简介、安装和使用方法、案例应用之详细攻略

LLMs之Agent之Lares&#xff1a;Lares的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;这篇博文介绍了 Lares&#xff0c;一个由简单的 AI 代理驱动的智能家居助手模拟器&#xff0c;它展现出令人惊讶的解决问题能力。 >> 背景痛点&#xff1a;每天都有新的…

Halcon 轮廓检测常用算子、原理及应用场景

一、引言 在机器视觉领域&#xff0c;轮廓检测是一项关键技术&#xff0c;它能够提取物体的边缘信息&#xff0c;从而实现物体的定位、识别、测量等多种功能。Halcon 作为一款强大的机器视觉软件库&#xff0c;提供了丰富的轮廓检测算子。本文将详细介绍 Halcon 中轮廓检测的常…

11.23[大数据]

PRO1:LSTM模型预测输出都是同一个值&#xff1f; 画出来的图像就是一条横线 这个搜了搜&#xff0c;原因可能有很多&#xff0c;但感觉最主要的原因极可能是激活函数选择不当&#xff0c;以及层的搭建不合适 原模型是 REF https://zhuanlan.zhihu.com/p/654325094 https:/…

TEA系列例题

解析 TEA 加密算法(C语言、python)&#xff1a;_tea加密-CSDN博客 CTF-RE 从0到N: TEA_tea加密原理-CSDN博客 1 字节 8 位 牢记密文的64位和密钥的128位,最好可以自己独立的写出tea解密代码 相当于密文是传入8个字符类型数据或者是2个整型数据, 密钥是16个字符数据或者4个…

[241206] X-CMD 发布 v0.4.15:env 升级,mirror 支持华为/腾讯 npm 镜像,pb-wayland 剪贴板

目录 X-CMD 发布 v0.4.15&#x1f4c3;Changelog&#x1f4e6; env|pkg&#x1fa9e; mirror&#x1f4d1; pb&#x1f3a8; theme|starship|ohmyposh&#x1f916; chat&#x1f4dd; man✅ 升级指南 X-CMD 发布 v0.4.15 &#x1f4c3;Changelog &#x1f4e6; env|pkg 新增…

SpringBoot【一】零基础入门 springboot 及 idea 搭建

一、前言 springboot是什么&#xff1f; Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。 该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。用我的话来理解&#xff0…

【kotlin 】内联类(value class / inline class)

官方文档&#xff1a;https://kotlinlang.org/docs/inline-classes.html 注&#xff1a;inline class 关键字已经被废弃&#xff0c;取而代之的是value class。现在使用内联类需要定义类为value class&#xff0c;并使用JvmInline注解进行标注。 一、使用场景 有时候&#xff…

3D 生成重建023-DMV3D用扩散模型做3D生成大模型

3D 生成重建023-DMV3D用扩散模型做3D生成大模型 文章目录 0 论文工作1 论文方法2 实验效果 0 论文工作 这个论文提出了一种新的三维生成方法DMV3D&#xff0c;它利用基于Transformer 的大型三维重建模型对多视图扩散进行去噪处理。重建模型包含三平面NeRF表示&#xff0c;并能…

Linux - 进程等待和进程替换

进程等待 前面我们了解了如果父进程没有回收子进程, 那么当子进程接收后, 就会一直处于僵尸状态, 导致内存泄漏, 那么我们如何让父进程来回收子进程的资源. waitpid 我们可以通过 Linux 提供的系统调用函数 wait 系列函数来等待子进程死亡, 并回收资源. #include <sys/t…

【Redis】壹 —— Redis 介绍

文章目录&#xff1a; 前言 一、认识Redis 1. Redis 用途 作为数据库 作为流引擎 二、服务端高并发分布式结构演变 1. 单机架构 2. 应用数据分离架构 3. 应用服务集群架构 4. 读写分离 / 主从分离架构 5. 冷热分离 —— 引入缓存 6. 分库分表 7. 微服务架构 8. …

D88【python 接口自动化学习】- pytest基础用法

day88 pytest运行参数-q -s -v 学习日期&#xff1a;20241203 学习目标&#xff1a;pytest基础用法 -- pytest运行参数-q -s -v&pytest使用ini配置指定运行参数 学习笔记&#xff1a; pytest -q 说明&#xff1a;简化控制台的输出 pytest -q .\testcases\test_reques…

22 网络编程:Go 语言如何通过 RPC 实现跨平台服务

在上一讲中&#xff0c;我为你讲解了 RESTful API 的规范以及实现&#xff0c;并且留了两个作业&#xff0c;它们分别是删除和修改用户&#xff0c;现在我为你讲解这两个作业。 删除一个用户比较简单&#xff0c;它的 API 格式和获取一个用户一样&#xff0c;但是 HTTP 方法换…

java八股-流量封控系统

文章目录 请求后台管理的频率-流量限制流量限制的业务代码UserFlowRiskControlFilter 短链接中台的流量限制CustomBlockHandler 对指定接口限流UserFlowRiskControlConfigurationSentinelRuleConfig 请求后台管理的频率-流量限制 根据登录用户做出控制&#xff0c;比如 x 秒请…

AI给我们生活带来了哪些便利?

在21世纪的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的力量&#xff0c;正深刻地改变着我们的生活方式&#xff0c;从日常琐事到复杂决策&#xff0c;无一不渗透着AI的智慧之光。它不仅极大地提升了生活效率&#xff0c;还为我们开启了前所未…