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元每小时&…

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;但其他用户则需…

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

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

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

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

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

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

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

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

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 应用中&#…

电焰灶:烹饪性能的深度剖析

在如今众多的厨房炉灶选择中&#xff0c;华火电焰灶以其独特的技术和性能吸引了不少消费者的目光。那么&#xff0c;华火电焰灶的综合烹饪性能究竟如何呢&#xff1f;让我们一起来深入探究。 首先&#xff0c;从火力方面来看&#xff0c;华火电焰灶展现出了强大的优势。其火焰强…

VS2019使用C#写窗体程序技巧(1)

1、打开串口 private void button1_Click(object sender, EventArgs e){myPort cmb1.Text;mybaud Convert.ToInt32(cmb2.Text, 10);databit 8;parity Parity.None;stopBit StopBits.One;textBox9.Text "2";try{sp new SerialPort(myPort, mybaud, parity, dat…

LLMs的基本组成:向量、Tokens和嵌入

编者按&#xff1a;随着人工智能技术的不断发展&#xff0c;大模型&#xff08;语言、视觉&#xff0c;或多模态模型&#xff09;已成为当今AI应用的核心组成部分。这些模型具有处理和理解自然语言等模态输入的能力&#xff0c;推动了诸如聊天机器人、智能助手、自动文本生成等…

私域社群的组织及运营角色定位、分工

私域社群运营是一个涉及多个角色和职能的复杂过程&#xff0c;每个角色都有其特定的职责和目标。以下是一些常见角色及其职能内容的概述&#xff1a; 产品经理&#xff08;Product Manager&#xff09; 负责私域社群产品的规划、设计和迭代。理解用户需求&#xff0c;收集用户反…

开源项目的发展趋势之托管平台

引言 回溯至十五年前的求学时光&#xff0c;当我们初涉编程的浩瀚海洋&#xff0c;面对程序设计这一崭新挑战&#xff0c;曾渴望能有一份现成的源码作为启航的灯塔。然而&#xff0c;在那个时代&#xff0c;除了有限的SDK资源外&#xff0c;寻觅到高质量、可借鉴的源代码并非易…

springboot服装购物商城系统-计算机毕业设计源码35058

摘要 服装购物商城系统小程序&#xff0c;依托Spring Boot框架的强大支持&#xff0c;为用户呈现了一个功能丰富、体验流畅的在线购物平台。该系统不仅涵盖了商品展示、用户注册登录、购物车管理、订单处理、支付集成等核心购物流程&#xff0c;还引入了个性化推荐算法&#xf…