【SpringBoot】多环境切换的灵活配置

news/2024/7/27 7:24:49/文章来源:https://blog.csdn.net/Qingai521/article/details/136567477

文章目录

  • profile 的使用
  • 激活 profile 的方式
    • 命令行启动
    • idea 中配置
    • 配置文件中激活
  • 开发中最灵活的多环境配置
    • 创建四个配置
    • 主配置文件
    • 其他几个环境配置
    • 使用方式
  • 配置文件拆分
  • 总结

在日常的开发中,一般都会分好几种环境,比如通常的

  • 开发环境:一般在开发的过程中,一个比较随意地环境,通常可以随意重启,删除数据 ;
  • 测试环境:面向测试同学的环境,需要相对稳定,完整,基本模拟线上的环境,但是可操作。
  • 生产环境:也就是线上环境,基本没有什么大的问题不会操作的环境,是重中之重。

在三个环境都需要部署,怎么样保证多个环境的配置正确,开发方便,部署方便,这篇总结下

profile 的使用

profile 为在不同环境下使用不同的配置提供了支持,我们可以通过激活、指定参数等方式快速切换环境。多 Profile 文件方式 Spring Boot 的配置文件共有两种形式:.properties 文件和 .yml 文件,不管哪种形式,它们都能通过文件名的命名形式区分出不同的环境的配置,

文件命名格式为:application-{profile}.properties/yml

其中,{profile} 一般为各个环境的名称或简称,

例如 dev、test 和 prod 等等。当然也可以使用自定义的一些名字。

个人比较习惯yml的配置,更方便阅读,结构明确。

激活 profile 的方式

命令行启动

java -jar target/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

idea 中配置

idea 中编辑启动参数,添加 vm 选项-Dspring.profiles.active=test注:这种方式和上面一样

在这里插入图片描述

配置文件中激活

创建 3 个配置文件,通过主配置文件激活环境(不灵活)

application.yml
application-dev.yml
application-test.yml

application.yml .主配置文件可以向下面这样写。

spring:profiles:active: dev

开发中最灵活的多环境配置

创建四个配置

application.yml
application-dev.yml
application-test.yml
application-prod.yml

主配置文件

application.yml #主配置文件

spring:profiles:active: ${ENV:dev}

注意:这里加了一个环境变量 ENV,在启动的时候进行注入,如果不写,默认启动 dev 环境

其他几个环境配置

application-dev.yml #开发环境的配置

server:port: 8091

application-test.yml #测试环境的配置

server:port: 8092

application-prod.yml #生产环境的配置

server:port: ${PORT:8093}

注:这三个环境配置,只在其中的 prod 环境使用了环境变量application-xxx.yml。 在后续使用prod的时候可以根据环境设置环境变量赋值配置。

相同的配置会覆盖 application.yml的配置

使用方式

1.在开发环境,可以写死测试环境,开发环境的配置,避免在开发传环境变量,激活什么的

2.在生产环境,可以通过环境变量 ENV=prod 激活生产环境的变量配置, idea 传递环境变量如下图
在这里插入图片描述

3.docker 环境启动时候通过 env 设置环境变量docker run -itd --env ENV=prod test.jar

4.docker-compose

在这里插入图片描述

配置文件拆分

配置文件支持将将配置进行拆分到不同的配置文件 如果多个环境拥有相同的配置,有两种解决办法

  • 提取到application.yml

  • 分离一个新的application-default_handler.yml

第一种情况可以针对 springboot 的一些通用配置

第二种适合一些业务的配置相关,比如项目中有一些自定义的配置,在三个环境都适合,就可以分离开

spring:profiles:active: ${ENV:dev}include: default_handler

只要 application-default_handler.yml 符合 yaml 的格式,项目中一样可以加载到

总结

  • 灵活使用环境变量启用不同的 profile
  • 灵活使用 spring.profiles.include 激活多个配置
  • 最后 application.properties 和 application.yml 是一样的使用方法
  • 如果你使用 nacos 也可以实现同样的效果,但是需要引入中间件,不推荐

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

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

相关文章

NTFS Disk by Omi NTFS for mac v1.1.4中文版

NTFS Disk by Omi NTFS for Mac:NTFS文件系统的无缝桥梁 软件下载:NTFS Disk by Omi NTFS for mac v1.1.4中文版 🌐 跨平台访问,文件无阻 NTFS Disk by Omi NTFS for Mac 为您的Mac提供了对NTFS文件系统的无缝访问。无论您是在Win…

FPGA-VGA成像原理与时序

什么是VGA: VGA, Video Graphics Array。即视频图形阵列,具有分辨率高、显示速率快、颜色丰富等优点。VGA接口不但是CRT显示设备的标准接口,同样也是LCD液晶显示设备的标准接口,具有广泛的应用范围。在FGPA中,常广泛用于图像处理等领域。 VGA 显示器成像原理 在 VGA 标准刚兴…

戏说c第二十六篇: 测试完备性衡量(代码覆盖率)

前言 师弟:“师兄,我又被鄙视了。说我的系统太差,测试不过关。” 我:“怎么说?” 师弟:“每次发布版本给程夏,都被她发现一些bug,太丢人了。师兄,有什么方法来衡量测试的…

供应链思维导图

https://author.baidu.com/home?frombjh_article&app_id1733215801356691 1 供应链管理流程图 2. 进销存 功能

【李沐精读系列】GPT、GPT-2和GPT-3论文精读

论文: GPT:Improving Language Understanding by Generative Pre-Training GTP-2:Language Models are Unsupervised Multitask Learners GPT-3:Language Models are Few-Shot Learners 参考:GPT、GPT-2、GPT-3论文精读…

VBA_MF系列技术资料1-395

MF系列VBA技术资料1-395 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-0…

《解密云计算:企业之选》

前言 在当今数字化时代,企业面临着巨大的数据处理压力和信息化需求,传统的IT架构已经无法满足日益增长的业务需求。在这样的背景下,越来越多的企业开始转向云计算,以实现灵活、高效和可扩展的IT资源管理和利用。 云计算 云计算是一种基于互联网的计算模式,它通过将数据、…

ElasticSearch之分片相关概念segment,merge,refresh等

写在前面 本文看下分片相关概念,segment,merge,refresh等。 1:segment,commit point,.del 一个倒排索引的文件称为segment,多个segment组合在一起就是lucene的index,也就是es的sh…

五种msvcp140.dll丢失的解决方法

《绝地求生》(PUBG)的玩家数量在不同时期有所变化: 最新的官方数据显示,截至2023年2月1日,PUBG全球玩家总数已经超过4亿,并且当时有月活跃玩家2.27亿和日活跃玩家8700万。 而在较早的一个时间点&#xff…

JS判断对象属性是否存在

一 、在JavaScript中,有几种方法可以判断对象属性是否存在: 使用in操作符: property in object 例如:name in obj,如果obj对象有name属性,返回true,否则返回false。 使用hasOwnProperty()方法&…

为什么说鸿蒙开发就业面广?人才遭“爆抢”的背后说明什么?

鸿蒙开发,作为华为推出的全新操作系统,自其诞生以来就备受关注。而鸿蒙开发就业面广,人才遭“爆抢”的现象,更是引发了业界的广泛讨论。那么,这一现象背后究竟隐藏着怎样的原因和深意呢? 首先,…

基于单片机的家庭防盗报警器设计

目 录 摘 要 II Abstract III 引 言 1 1 系统方案设计 4 1.1 方案论证 4 1.2 项目总体设计 5 2 项目硬件设计 7 2.1 单片机型号的选择 7 2.2 单片机的引脚说明 8 2.3 单片机的最小系统 9 2.3.1 时钟电路设计 9 2.3.2 复位电路设计 10 2.4 红外信号采集及其处理 11 2.5 蜂鸣器电…

C语言第三十五弹---文件操作(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 文件操作 1、为什么使用文件? 2、什么是文件? 2.1、程序文件 2.2、数据文件 2.3、文件名 3、二进制文件和文本文件 4、文件的打开和…

高校水电预付费系统有什么作用?

Hey小伙伴们,今天来聊聊咱们大学里的一个超级实用的设施——水电预付费系统!你是不是还在为每个月的水电账单烦恼呢?别担心,这个系统就是你的生活小帮手! 首先,想象一下这 样的场景:开学初&…

win11修改主机mac地址

很多时候,为了限制恶意的蹭流浪,除了分配固定的ip地址外,还限制mac地址。只有mac与ip一致,才能上网冲浪 网络适配器中修改 搜索“控制面板”打开 控制面板 > 网络和Internet > 网络和共享中心 >查看网络状态和任务>…

机器学习 | 四大常用机器学习Python库介绍

今天这篇我们介绍下Python中常用的机器学习库(机器学习、深度学习啥的,小编还是建议使用Python进行建模编写哈),也算是本公号机器学习的第一篇推文,主要内容如下: 机器学习常用四大Python库 关于机器学习的我想说的话 所有完整代…

vue3的开发小技巧

「总之岁月漫长&#xff0c;然而值得等待。」 目录 父组件调用子组件函数如何访问全局api 父组件调用子组件函数 ref, defineExpose //父组件 代码 <child ref"ch">this.$refs.ch.fn();//子组件 函数抛出 const fn () > { }; defineExpose({ fn });如何…

【Leetcode每日一题】 前缀和 - 连续数组(难度⭐⭐)(30)

1. 题目解析 题目链接&#xff1a;525. 连续数组 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于计算题目所给数组是否存在连续子数组使得数组里头0和1的数量相同&#xff0c;存在返回连续子数组最长长度即可&#xff0c…

pytest测试框架使用基础07 fixture—parametrize获取参数的几种常用形式

【pytest】parametrize获取参数的几种常用形式: a.数据结构 b.文件 c.数据库 d.conftest.py配置一、直接在标签上传参 1.1 一个参数多个值 pytest.mark.parametrize("参数", (参数值1, 参数值2, 参数值3))示例&#xff1a; import pytest # 单个参数的情况 pytest.…

Linux——MySQL主从复制与读写分离

实验环境 虚拟机 3台 centos7.9 网卡NAT模式 数量 1 组件包mysql-5.6.36.tar.gz cmake-2.8.6.tar.gz 设备 IP 备注 Centos01 192.168.223.123 Amoeba Centos02 192.168.223.124 Master Centos03 192.168.223.125 Slave MySQL安装 主从同时操作 安装所需要的…