公司新来的实习生问我SpringBoot多个环境的配置方式

news2024/7/7 16:11:44

这是一篇写给新手的文章,老手可以绕行了。

起因是一个同学让我帮他看个问题,他说有两个环境,一个环境有问题,另一个环境没问题,但是一直找不到原因,假设一个环境是 dev,另一个环境是 test。

于是,我远程了他的机器,想分别看下两个环境的现象,结果发现没有地方可以配置环境。我问他是怎么切换环境的,他说要连另外一个环境就把 application.yml 中的配置改了,之后切换回来的时候再改回来。

我当时直接就无语住了。后来想想他还没毕业,不知道也正常,我刚学 Spring Boot 的时候连多个环境都不知道,也是后来正式加入工作团队后才学来的。

我们平时做项目的时候,一般都会分几套环境,开发环境、测试环境、预发布环境以及生产环境。每一套环境的配置都是不一样的,比如数据库连接串不一样、redis不一样,还有其他一些配置很可能都不一样。

那这时候,我们切换环境的时候就不能像前面说的那样手动改配置文件的内容了,那样既傻又费事。

有两种区分多个环境的方式可以使用。

多个配置文件

当配置Spring Boot应用程序的多个环境时,使用多配置文件的方式,通常会使用以下约定:application-{profile}.yml,其中{profile}是配置文件的名称。在这些配置文件中,你可以根据不同的环境指定不同的属性值。

例如 application-dev.yml 表示开发环境, application-test.yml 表示测试环境,application-prod.yml 表示生产环境,还有一个 application.yml表示通用的公共配置。

图片

通用配置文件 application.yml

和环境无关的配置都可以放在这里,例如启动端口号、服务名称以及其他共用属性等。

还可以在通用配置中设置 spring.profiles.active来控制启动配置,比如配置成 dev,那就是用 application-dev.yml的配置。

server:
  port: 9000

spring:
  application:
    name: fengzheng
  profiles:
    # 环境配置
    active: dev
    
common:
 key: 公共 key

各环境配置

除了通用配置外, 其他几个配置文件就是配置与各自环境有关的配置了,比如开发环境和测试环境使用不用的数据库服务器,不同的redis集群,这就要在各自的配置中区分开来。

dev 环境配置文件 application-dev.yml

dev-property: dev-value
dev-another-property: dev-another-value

# Dev 环境的数据库配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/devdb
    username: devuser
    password: devpassword
  1. test 环境配置文件 application-test.yml

test-property: test-value
test-another-property: test-another-value

# Test 环境的数据库配置
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testdb
    username: testuser
    password: testpassword
  1. prod 环境配置文件 application-prod.yml

prod-property: prod-value
prod-another-property: prod-another-value

# Prod 环境的数据库配置
spring:
  datasource:
    url: jdbc:mysql://production-db-url:3306/proddb
    username: produser
    password: prodpassword

指定环境启动

之后在启动项目的时候,就可以通过-Dspring.profiles.active来指定使用的配置文件,也就是指定的环境了。

java -jar myapp.jar -Dspring.profiles.active=dev

例如上面的命令,将激活 application-dev.yml 中的配置。

在 IDEA 中,通过 "Run/Debug Configurations",在 VM options 中加入相应的配置启动,可以直接连接到对应的环境。

图片

或者找到 Active profiles ,直接在后面填写对应的配置名称也可以。

图片

在一个配置文件中配置多个环境

除了使用多个配置文件,用后缀区分外,还可以直接在一个配置文件中配置多个环境。

例如下面的配置,把公共配置写在最前面,然后之后每一个环境的配置用 ---区分,spring.profiles来指定当前段落代表的配置。

spring:
  application:
    name: fengzheng
    
---    
spring:
  profiles: dev
  datasource:
    url: jdbc:mysql://production-db-url:3306/dev-db
    username: produser
    password: prodpassword
server:
  port: 1990


---
spring:
  profiles: test
  datasource:
    url: jdbc:mysql://production-db-url:3306/test-db
    username: produser
    password: prodpassword
server:
  port: 1991

---
spring:
  profiles: prod
  datasource:
    url: jdbc:mysql://production-db-url:3306/prod-db
    username: produser
    password: prodpassword
server:
  port: 1992

之后启动项目的时候,和前面多个配置文件的方式一样。

通过-Dspring.profiles.active来指定使用的配置文件,也就是指定的环境了。

java -jar myapp.jar -Dspring.profiles.active=dev

例如上面的命令,将激活 application-dev.yml 中的配置。

在 IDEA 中,通过 "Run/Debug Configurations",在 VM options 中加入相应的配置启动,可以直接连接到对应的环境。

图片

或者找到 Active profiles ,直接在后面填写对应的配置名称也可以。

图片

如果感觉本文对你有帮助,点赞关注支持一下,想要了解更多Java后端,大数据,算法领域最新资讯可以关注我公众号【架构师老毕】私信666还可获取更多Java后端,大数据,算法PDF+大厂最新面试题整理+视频精讲

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

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

相关文章

2023 版 QQ 机器人运行部署文档

文章目录 1.前置说明2.机器人框架的下载与运行2.1 下载机器人框架2.2 下载可操作框架的静态页面2.3 运行机器人框架 3.登录QQ机器人3.1 前提说明3.2 扫码登录3.3 注意事项 4.后端程序处理消息4.1 下载 stater4.2 stater 基本说明4.3 运行后端程序4.4 测试消息处理4.5 关于扩展消…

ISE_ChipScope Pro的使用

1.ChipScope Pro Core Inserter 使用流程 在之前以及编译好的流水灯实验上进行学习 ChipScope的使用。 一、新建一个ChipScope 核 点击Next,然后在下一个框中选择 Finish,你就会在项目菜单中看到有XX.cdc核文件。 二、对核文件进行设置 右键“Synthesize – XST” …

计算机丢失ac1st16.dll怎么解决?教你简单的修复ac1st16.dl文件

在使用Windows操作系统时,有时会遇到一些DLL文件丢失的问题,其中之一就是AC1ST16.DLL。AC1ST16.DLL是用于AutoCAD相关软件的动态链接库文件,当该文件丢失时,可能会导致软件无法正常运行。本文将详细介绍多种解决AC1ST16.DLL丢失问…

OpenGL超级宝典(第五版)第8章fbo_drawbuffers例子分析

目录 1. 概述 2. 疑难点剖析 2.1 SetupRC函数分析 2.2 multibuffer.vs分析 2.3 RenderScene分析 3. 其它 1. 概述 《OpenGL超级宝典(第五版)》如下: 该书第8版的 fbo_drawbuffers工程展示了如下技术点: 什么是帧缓冲区对象&#xff08…

【Linux】进程间通信方式②——文件共享映射(附图解与代码实现)

我们来简单了解下文件共享映射的定义:通过映射文件,使用映射机制,实现资源共享,完成进程通信 具体是如何实现的呢?跟随着这篇博客,我们来看一看 进程通过文件共享映射实现通信的具体步骤 由某一进程创建映…

【湖科大教书匠】计算机网络随堂笔记第2章(计算机网络物理层)

目录 2.1、物理层的基本概念 2.2、物理层下面的传输媒体 导引型传输媒体 同轴电缆 双绞线 光纤 电力线 非导引型传输媒体 无线电波 微波 红外线 可见光 2.3、传输方式 串行传输和并行传输 同步传输和异步传输 单向通信(单工)、双向交替通信&#xf…

【LeetCode-简单题】110. 平衡二叉树

文章目录 题目方法一:后序递归 题目 方法一:后序递归 递归遍历的同时判断是否是平衡二叉树,如果不是,就置为-1,如果是 就正常做递归求最大深度 参考图解网址 判断平衡二叉树 class Solution {public boolean isBalanc…

誉天在线项目-放大招-Vue3集成RichText富文本客户端组件QuillEditor

背景 开发中我们需要填写图文内容,就是含有图片和文字,html标准组件中是没有的。都是第三方来实现,就需要我们去集成。 有早期的fckEditor、ckEditor等,新的我们使用了vue框架,市场又推出了quillEditor。下面我们就在…

【【萌新的SOC学习之绪论】】

萌新的SOC学习之绪论 Vitis 统一软件平台的前身为 Xilinx SDK,从 Vivado 2019.2 版本开始,Xilinx SDK 开发环境已统一整合 到全功能一体化的 Vitis 中。Vitis 开发平台除了启动方式、软件界面、使用方法与 SDK 开发平台略有区别, 其他操作几…

使用acme.sh申请免费ssl证书(Cloudflare方式API自动验证增加DNS Record到期证书到期自动重新申请)

下载acme.sh curl https://get.acme.sh | sh -s emailmyexample.comcd ~/.acme.sh/获取Cloudflare密钥 Preferences | Cloudflare 登录选择账户详情选择API Token选择创建令牌选择区域DNS模板,并设置编辑写入权限生成并复制令牌备用回到首页概览界面下部获取账号…

【RabbitMQ实战】3分钟在Linux上安装RabbitMQ

本节采用docker安装RabbitMQ。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来,不得不说真的很方便啊,好了,开搞。使用前提:Linux虚拟…

3D设计软件Rhinoceros 6 mac 犀牛6中文版功能特征

Rhinoceros Mac中文版是一款3D设计软件“犀牛”,在众多三维建模软件中,Rhinoceros mac因为其体积小、功能强大、对硬件要求低而广受欢迎,对于专业的3D设计人员来说它是一款非常不错的3D建模软件,Rhinoceros Mac中文版能轻易整合3D…

苹果手机短信删除了怎么恢复?3种有效方法介绍

手机短信是一种即时通信方式,人们可以使用短信来达到快速传递信息的目的。在没有网络或者网络不稳定的时候,短信仍然可以做到发送和接收,这弥补了其他网络通信软件的缺点。 所以说,手机短信仍然是我们生活中不可缺少的一部分。当…

【rtp】mid 扩展: RtpMid 字符串扩展的解析和写入

mid 是uint8_t 类型? 扩展填写的是字符串,读取字符串后atoi 转 uint8_t : webrtc 看起来是个字符串:写入 扩展的值是改变了: 这里是更新扩展的长度: 新的大小小于原来的,没有缩减内存,而是对于多余的置位0了:if (len < current_len) {memset(

基于SSM的高校图书馆个性化服务的设计与实现(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的高校图书馆个性化服务的设计与实现&#xff08;有报告&#xff09;。Javaee项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过S…

如何在低代码平台中应用可视化编程

可视化编程&#xff0c;亦即可视化程序设计&#xff1a;以“所见即所得”的编程思想为原则&#xff0c;力图实现编程工作的可视化&#xff0c;即随时可以看到结果&#xff0c;程序与结果的调整同步。可视化编程的理念来源于可视化技术&#xff0c;它指的是一种把计算机程序中的…

深度学习在视频直播美颜sdk中的应用

视频直播美颜SDK是一类用于实时视频美颜处理的工具包&#xff0c;它们利用深度学习算法来提高视频直播中的主播和观众的外观吸引力。本文将深入探讨深度学习在视频直播美颜sdk中的应用&#xff0c;以及这些应用对直播行业的重要性。 一、人脸检测与关键点定位 通过卷积神经网…

Centos7安装go解释器

Centos7安装go解释器 下载解压go压缩包编辑go变量结果验证 下载解压go压缩包 # 下载 wget -c https://go.dev/dl/go1.20.2.linux-amd64.tar.gz# 解压到指定目录 tar xvf go1.20.2.linux-amd64.tar.gz -C /usr/local/编辑go变量 /etc/profile.d/go.sh # 指定go执行程序位置 e…

多线程进阶:常见的锁策略、CAS

之前我们所了解的属于多线程的初阶内容。今天开始&#xff0c;我们进入多线程进阶的学习。 锁的策略 乐观锁 悲观锁 这不是两把具体的锁&#xff0c;应该叫做“两类锁” 乐观锁&#xff1a;预测锁竞争不是很激烈&#xff08;这里做的工作可能就会少一些&#xff09; 悲观锁…

【操作系统笔记六】内存分配

内存对齐 问题&#xff1a;为什么需要内存对齐呢&#xff1f; 主要原因是为了兼容&#xff0c;为了让程序可以运行在不同的处理器中&#xff0c;有很多处理器在访问内存的时候&#xff0c;只能从特定的内存地址读取数据。换个说法就是处理器每次只能从内存取出特定个数字节的数…