java项目如何配置不同环境变量 以及 原理

如何配置不同的profile

首先,一个java项目,需要有不同的环境配置,打包时,自动使用对应的配置。那么,如何实现呢?

在你的Spring Boot项目的src/main/resources目录下创建或添加一个application.yml文件。这是Spring Boot默认查找配置文件的位置。这个文件,可以添加通用的配置。

然后,还可以在同个目录下,创建如application-test.yml, application-prod.yml等文件,Spring Boot会自动识别这些profile-specific的配置文件。你可以在这些文件中,定义不同环境的参数,例如,数据库地址呀,redis缓存地址呀等。
即,src/main/resources目录下,可以有类似这样几个文件:

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

然后,可以application-test.yml, application-prod.yml, 声明2个变量一样,值不一样的配置。举个例子
application-test.yml:

mysql:url: https://xx.test.com/mysql

application-prod.yml:

mysql:url: https://xx.online.com/mysql

在java代码中,就可以动态使用这个url:

    @Value("${mysql.url}")protected String mysqlUrl;

完美。

那么,系统运行时,是如何自动使用对应的profile-specific.yml文件呢?请看下文

Profile自动切换的原理

我们从外网内,来看环境变量,是如何一层层传递到项目里的。
首先,一个java项目,一般就是docker来打包了。所以,从docker开始说起:

  1. docker打包命令,带上环境参数:
docker build -f assistant-web-api/qke/Dockerfile -t docker-registry.qiyi.virtual/mbd-ai/assistant-web-api-test:$tag . --build-arg dc_env=test

关键词,build-arg ,设置了个参数,dc_env=test

  1. Docker文件,声明要dc_env,且用于mvn命令
ARG dc_env
...
RUN mvn -T 8 -DdisableRpm=true -pl '!assistant-web-manager' clean package -Dmaven.test.skip=true -P${dc_env}

注意,-P表示设置profile

  1. pom.xml,配置不同的环境

上一步的mvn命令,加了-P,是在哪里用呢? 当然是在marven的配置文件,也就是pom.xml中。

<profiles><profile><id>test</id><properties><profile.active>test</profile.active><log.env>test</log.env></properties></profile><profile><id>prod</id><properties><profile.active>prod</profile.active><log.env>prod</log.env></properties></profile></profiles>

上面,加了2个环境变量。每个变量,设了properties,即profile.active
这个值,哪里能用呢?

在主application.yml文件中用!

server:profiles:active: @profile.active@

定义要用哪个Profile,就根据上一步的profile.active变量来的值了。

自此,从docker打包定义的变量,就传递到了主yml文件中。这个文件,server.profiles.active是哪个值,就会用哪个子yml的配置。例如,如果是test,则会加载application-test.yml的配置!!!

开发环境中,如何切换环境

  1. 首先,marven先sync一下。sync后,勾选某个环境。
    在这里插入图片描述

  2. 接着,本地编译打包,并通过-P,指定环境变量:
    在这里插入图片描述

  3. 最后,要运行了,点击下图的右上角,有个Edit Configuration,出来弹窗,在Active Profile中,填入对应的环境变量,例如test
    在这里插入图片描述

  4. 最后,就可以点击运行了!

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

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

相关文章

纯CSS瀑布流

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>瀑布流布局</title> <style>/* 瀑布…

[论文精读]BrainLM: A foundation model for brain activity recordings

论文网址&#xff1a;pdf (openreview.net) 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 省流版 1.1. 心得 1.2…

redis批量删除keys,用lua脚本。

文章目录 现象解决方法 现象 系统报错&#xff1a; misconf redis is configured to save ....后查看机器内存。 是内存满了&#xff0c;需要删除其中的key 解决方法 (1) 编写一个脚本&#xff0c;放在redis-cli.exe同一个目录 (2) 脚本内容如下&#xff1a; -- 使用Lua脚…

经典文献阅读之--Self-Supervised Bird’s Eye View Motion,,(基于跨模态信号的自监督鸟瞰图运动预测)

Tip: 如果你在进行深度学习、自动驾驶、模型推理、微调或AI绘画出图等任务&#xff0c;并且需要GPU资源&#xff0c;可以考虑使用UCloud云计算旗下的Compshare的GPU算力云平台。他们提供高性价比的4090 GPU&#xff0c;按时收费每卡2.6元&#xff0c;月卡只需要1.7元每小时&…

React@16.x(53)Redux@4.x(2)- action

目录 1&#xff0c;特点1.1&#xff0c;payload1.2&#xff0c;type1.3&#xff0c;bindActionCreators 1&#xff0c;特点 是一个平面对象&#xff08;plain-object&#xff09;。换句话说&#xff0c;就是通过字面量创建的对象&#xff0c;它的 __proto__ 指向 Object.proto…

window11连接lenovo 熊猫 Pro 打印机 M7328W

1、win11先下驱动&#xff08;将USB线接至电脑、电源通电&#xff09;&#xff0c;型号在后背面插电源的地方可以找到。 图1 开始电源按钮&#xff0c;会有蓝、绿、红闪烁灯光循环显示。 下载驱动&#xff1a; 图像发现 M7328W 然后按照说明书安装即可。 2、安装完成后&…

Delta的最新更新可让iPad用户同时模拟多款游戏

Delta iOS 应用程序发布了一个更新&#xff0c;引入了复古 游戏模拟器重新设计的标识&#xff0c;以及原生 iPad 支持&#xff0c;允许用户同时玩多个 游戏。 据 Delta 开发者 Riley Testut 称&#xff0c;欧盟用户可以立即通过AltStore PAL 下载更新&#xff0c;但其他用户则需…

YOLO v8进行目标检测的遇到的bug小结

OSError: [WinError 1455] 页面文件太小&#xff0c;无法完成操作。 我的python环境是放在C盘的&#xff1a; 在“我的电脑”点击鼠标右键&#xff0c;打开“属性”点击高级系统设置点击“设置”找到“高级”点击“更改”分配“虚拟内存”&#xff08;这里需要重启电脑才能生…

【机器学习】朴素贝叶斯算法详解与实战扩展

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 朴素贝叶斯算法是一种基于概率统计的分类方法&#xff0c;它利用贝叶斯定理和特征条件独立假设来预测样本的类别。尽管其假设特征之间相互独立在现实中往往不成立&#xff0c;但朴素贝叶斯分类器因其计算…

dataset source

ObjectMapper objectMapper new ObjectMapper();JsonNode chartValueJson objectMapper.readTree(chartValue);// 获取dataset节点ArrayNode dataset (ArrayNode) chartValueJson.path("dataset");// 找到source节点并替换它for (JsonNode node : dataset) {if (n…

项目纪实 | 业务不停机、升级0感知!万里数据库生产环境助力操作系统升级 获客户点赞

为积极响应和落实国家、集团相关要求&#xff0c;某运营商省公司历时一个月将GreatDB数据库集群下Red Hat操作系统升级为BigCloud操作系统&#xff0c;以建立完善的IT自主可控体系&#xff0c;推动产业链生态发展。 源起&#xff1a;项目背景一览 2024年初&#xff0c;万里数…

基础架构服务API:降低成本,提升业务效益

基础架构服务API的应用可以显著降低企业的成本&#xff0c;并提升业务效益。通过使用这些API&#xff0c;企业可以充分利用云计算、自动化部署和资源管理等功能&#xff0c;从而减少了传统基础设施所需的大量投资和维护成本。这些API还提供了弹性扩展和自动化功能&#xff0c;使…

flutter常用库的介绍(1)

import dart:async; 是在Dart语言中用来引入Dart标准库中的 async 和 await 等异步编程相关的功能的声明。具体作用如下&#xff1a; 引入异步编程的功能: Dart中的 async 和 await 关键字用于编写异步代码&#xff0c;即可以处理非阻塞的操作&#xff0c;如等待I/O操作、定时器…

ABeam News | FY25 ABeam德硕大中华区入社式,飞往崭新航向!

FY25 ABeam大中华区入社式 7月1日&#xff0c;51名 ABeam大中华区新生在艾宾信息技术开发&#xff08;上海&#xff09;有限公司大连分公司&#xff08;以下简称TDC&#xff09;报到&#xff0c;我们为他们的到来准备了隆重的入社仪式&#xff0c;并举办了热情而又温馨的欢迎晚…

【OC】OC与MHA对比

MHA 简介 MHA&#xff08;Master High Availability&#xff09;目前在MySQL高可用方面是一个相对成熟的解决方案&#xff0c;它由日本DeNA公司youshimaton&#xff08;现就职于Facebook公司&#xff09;开发&#xff0c;是一套优秀的作为MySQL高可用性环境下故障切换和主从提…

springboot美食分享平台-计算机毕业设计源码45429

基于Web美食分享平台的系统设计与实现 摘 要 本研究基于Spring Boot框架&#xff0c;设计并实现了一个Web美食分享平台&#xff0c;旨在为用户提供一个交流分享美食体验的社区平台。该平台涵盖了用户注册登录、美食制作方法分享发布、点赞评论互动等功能模块&#xff0c;致力于…

cdr捕捉点怎么设置---模大狮模型网

在 CorelDRAW 中&#xff0c;捕捉点(Snap Points)是一种非常有用的功能&#xff0c;它可以帮助你在绘制和编辑图形时对齐、定位和调整对象。以下是关于如何设置捕捉点的简要步骤&#xff1a; 打开和设置捕捉点&#xff1a; 打开捕捉点控制器&#xff1a; 在 CorelDRAW 的顶部菜…

C# 解析省份、城市、区域 json文件

一、json文件内容如下&#xff0c;&#xff08;小程序里好像有用到...&#xff09;: 二、读取包含省份城市区域的json文件&#xff0c;并整理成想要的结果&#xff1a; string path Server.MapPath("/js"); string file System.IO.Path.Combine(path, "数据.…

JVM:SpringBoot TomcatEmbeddedWebappClassLoader

文章目录 一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系 一、介绍 TomcatEmbeddedWebappClassLoader 是 Spring Boot 在其内嵌 Tomcat 容器中使用的一个类加载器&#xff08;ClassLoader&#xff09;。在 Spring Boot 应用中&#…

Python图形用户界面的文本文件加密工具

Python图形用户界面的文本文件加密工具 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x5oEvdLE-1720676762602)(https://i-blog.csdnimg.cn/direct/ddf0cd975b2d48a9a2f3b35c55e00add.png)] 设计方案 DES.py DESAlgorithm 类负责管理密钥并提供…