Springboot多环境切换最灵活配置,没有之一

news2024/12/23 8:51:37

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

开发环境:一般在开发的过程中,一个比较随意地环境,通常可以随意重启,删除数据 

测试环境:面向测试同学的环境,需要相对稳定,完整,基本模拟线上的环境,但是可操作。 

生产环境:也就是线上环境,基本没有什么大的问题不会操作的环境,是重中之重。

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

1、profile 的使用

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

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

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

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

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

2、激活 profile 的方式

2.1 命令行启动

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

2.2 idea 中配置

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

2.3 配置文件中激活

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

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

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

spring:
  profiles:
    active: dev

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

3.1 创建四个配置

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

3.2 主配置文件

application.yml #主配置文件

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

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

3.3 其他几个环境配置

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的配置

3.4 使用方式

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

  • 2.在生产环境,可以通过环境变量 ENV=prod 激活生产环境的变量配置, idea 传递环境变量如下图

图片

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

  • 4.docker-compose

4、配置文件拆分

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

  • 提取到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.coloradmin.cn/o/1500108.html

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

相关文章

测试点点延迟和带宽的脚本总结

从队列中获取节点名 我们有时候需要从任务队列中取出完整的节点名称,比如cn[8044-8046,8358-8360,8926-8928,9002-9004],可以给定参数input_str也可以在脚本中直接写死。 import re import subprocess import sysinput_str "cn[7512-7519,7545-75…

音视频数字化(视频线缆与接口)

目录 1、DVI接口 2、DP接口 之前的文章【音视频数字化(线缆与接口)】提到了部分视频线缆,今天再补充几个。 视频模拟信号连接从莲花头的“复合”线开始,经历了S端子、色差分量接口,通过亮度、色度尽量分离的办法提高画面质量,到VGA已经到了模拟的顶峰,实现了RGB的独立…

面试问答之MySQL数据库进阶

文章目录 🐒个人主页:信计2102罗铠威🏅JavaEE系列专栏📖前言:🎀 MySQL架构🐕数据库引擎🐕 InnoDB存储存储引擎🐕MYISAM 🏨索引🐕哪些情况需要创建…

学习c语言:预处理详解(宏定义)

1.预定义符号 C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&…

Docker镜像及Dockerfile详解

1 Docker镜像用途 统一应用发布的标准格式支撑一个Docker容器的运行 2 Docker镜像的创建方法 基于已有镜像创建基于本地模板创建基于Dockerfile创建 (实际环境中用的最多) 2.1 基于已有镜像的创建 将容器里面运行的程序及运行环境打包生成新的镜像 …

盘点美貌与个性兼备的国漫女神,她们绝不是花瓶!

在近年来的影视作品里,女性角色不再只是简单的陪衬或是花瓶,她们以各具特色的形象,展现了独立、坚韧和多元的女性力量。而在二次元的世界里,众多女角色同样散发着耀眼的光芒。正值国际妇女节,一起来看看国漫中那些兼具…

新能源车高压线束更换VR虚拟互动教学保障了培训安全可控

随着新能源汽车市场的快速发展,对于新能源汽车检修人才的需求也日益增长。然而,传统的培训模式往往存在一些限制,如培训周期长、成本高、实践机会少等。为了解决这些问题,新能源车检修VR互动培训应运而生,成为一种创新…

分享MDN前端结构化技能、实践指南、学习资源

前言 MDN课程为成为一名成功的前端开发人员提供了一个结构化的基本技能和实践指南,以及推荐的学习资源。 先看下让人不得不服的书《宝宝的网页设计》(套装共3册) 宝宝的HTML、宝宝的CSS、宝宝的JavaScript 全球首套中英文宝宝编程启蒙书&a…

文献学习-14-一种用于高精度微创手术的纤维机器人

Authors: Mohamed E. M. K. Abdelaziz1,2 †, Jinshi Zhao1,3 †, Bruno Gil Rosa1,2 , Hyun-Taek Lee4 , Daniel Simon3,5 , Khushi Vyas1,2 , Bing Li6,7 , Hanifa Koguna3 , Yue Li1 , Ali Anil Demircali3 , Huseyin Uvet8 , Gulsum Gencoglan9,10, Arzu Akcay11,12, Moham…

WinCE USB驱动架构及术语明析

一、层式驱动的概念。 WinCE驱动多为层式驱动,分为MDD和PDD两层。 MDD包含通用的驱动代码,向操作系统提供了驱动接口,该层代码调用PDD功能访问硬件。 PDD部分包含与硬件平台相关的特殊代码,不具有通用性。 之所以要分层&#xff0…

050-WEB攻防-PHP应用文件包含LFIRFI伪协议编码算法无文件利用黑白盒

050-WEB攻防-PHP应用&文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒 #知识点: 1、文件包含-原理&分类&危害-LFI&RFI 2、文件包含-利用-黑白盒&无文件&伪协议 演示案例: ➢文件包含-原理&分类&am…

C语言从入门到精通 第十一章(文件操作)

写在前面: 本系列专栏主要介绍C语言的相关知识,思路以下面的参考链接教程为主,大部分笔记也出自该教程。除了参考下面的链接教程以外,笔者还参考了其它的一些C语言教材,笔者认为重要的部分大多都会用粗体标注&#xf…

C++ Qt开发:QFileSystemModel文件管理组件

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemModel组件实现文件管理器…

HelpLook 和 confluence:创建知识库我选HelpLook

企业要想快速创建知识库,最好的方法就是利用好工具。而市面上创建知识库的平台多而繁杂,无法在最快时间内判断哪一个是最适合企业解决问题的。HelpLook和confluence功能相似,多数人无法判断并做出最佳选择,今天就跟着LookLook同学…

1688商品详情数据丨工厂详情数据丨店铺详情数据

1688商品详情数据、工厂详情数据以及店铺详情数据是商家在阿里巴巴1688平台上进行运营和决策的重要参考。这些数据涵盖了商品的详细信息、工厂的生产能力和信誉情况,以及店铺的经营状况和口碑评价,为商家提供了全方位的市场洞察和竞争优势。 请求示例&a…

Flutter学习9 - http 中 get/post 请求示例

1、配置 http pubspec.yaml dependencies:http: ^0.13.4flutter:sdk: flutterhttp 库最新插件版本查看:https://pub.dev/packages/http不一定要用最新版本 http,要使用项目所能支持的版本 .dart import package:http/http.dart as http;2、示例 &a…

基于UDP实现直播间聊天的功能

需求:软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责:1.接收用户的昵称2.接收用户输入的信息,能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责:1.对所有加入直播间的用…

基于uniapp cli项目开发的老项目,运行报错path.replace is not a function

项目:基于uniapp cli的微信小程序老项目 问题:git拉取代码,npm安装包时就报错; cnpm能安装成功包,运行报错 三种方法尝试解决: 更改代码,typeof pathstring的话,才走path.replace…

mysql的语法总结2

命令: mysql -u 用户名 -p mysql登录 命令:create database u1 创建数据库u1 查询数据库 使用数据库u1 创建表department 查询表department ALTER TABLE 表名 操作类型; 操作类型可以有以下的操作: 添加列&#x…

【算法 高级数据结构】树状数组:一种高效的数据结构(一)

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:算法题、 基础算法~赶紧来学算法吧 💡往期推荐: 【算法基础 & 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理&#x…