Maven多环境打包配置

一、启动时指定环境配置文件

在启动springboot应用的jar包时,我们可以指定配置文件,通常把配置文件上传到linux服务器对应jar包的同级目录,或者统一的配置文件存放目录

   java -jar your-app.jar --spring.config.location=/opt/softs/applications-prod.yaml

实际可以把配置文件路径spring.config.location后面的替换成你自己的存放路径,把配置文件放到服务器上可以很方便的随时修改内容。
以上说的是在启动jar包的时候指定配置文件,那么如何在maven打jar包的时候同时把指定配置文件打包进去,直接启动就好了?请看接下来的分析

二、maven多环境打包配置

首先创建一个springboot应用(如果是微服务,且每个服务都是springboot应用的话,都按照同样的配置即可,笔者这里是为了举例说明),大概的结构如下
在这里插入图片描述
代码结构不重要,重点是pom文件和配置文件怎么配置

多个配置文件创建

假设现在有三个环境,分别是开发环境、测试环境、生产环境,这也是标准的开发、测试、上线流程所需要的软件环境。笔者在src/main/resources下创建了四个配置文件
在这里插入图片描述

application.yaml

这个是主配置文件,里面可以配置一些通用和基础的配置,比如连接数据,mybatis等等

spring:profiles:active: @environment@datasource:# 数据库连接信息driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/usertest?useSSL=false&serverTimezone=UTCusername: rootpassword: root
mybatis:# MyBatis配置mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.execute.batch.executebatch.mapperconfiguration:map-underscore-to-camel-case: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl

也可以只配置如下

spring:profiles:active: @environment@

笔者这里只配置了如下内容,active是使用哪个环境的配置,这里是一个变量,先不管后面再说明
在这里插入图片描述

application-dev.yaml

这个是开发环境配置,配置如下
在这里插入图片描述
端口号,和数据库配置,mybatis配置。数据库配置一般在各个环境使用的都不同,所以应该分别配置到对应环境下的配置文件中。mybatis配置这个一般是不变的,一般可以放在上面的application.yaml主配置文件中,不过笔者这里没有动了。
开发环境端口号是4455

application-test.yaml

这个是测试环境配置,内容如下
在这里插入图片描述
内容同上,只是端口不一样,为6677

application-prod.yaml

生产环境配置文件
在这里插入图片描述
生产环境的端口号是7788

pom文件配置

首先是profiles配置

<profiles><profile><!--不同环境Profile的唯一id--><id>dev</id><!--默认激活dev 环境--><activation><activeByDefault>true</activeByDefault></activation><properties><!--environment是自定义的字段(名字随便起),自定义字段可以有多个,确保与配置文件一致--><environment>dev</environment></properties></profile><profile><id>prod</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>prod</environment></properties></profile><profile><id>test</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>test</environment></properties></profile></profiles>

有三组profile,分别对应三个环境dev、prod、test
注: < e n v i r o n m e n t > d e v < / e n v i r o n m e n t > <environment>dev</environment> <environment>dev</environment>这个environment标签可以随意定义,只要application.yaml里面能对应上就行
在这里插入图片描述
build配置

    <!-- 打包需要引入对应环境的配置文件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--打包时跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.1.2</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>default-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>target/classes</outputDirectory><useDefaultDelimiters>false</useDefaultDelimiters><delimiters><delimiter>@</delimiter></delimiters><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources/</directory><filtering>true</filtering><includes><include>**/*.yaml</include></includes></resource><resource><directory>src/main/resources/</directory><excludes><exclude>**/*.yaml</exclude></excludes></resource></resources></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.3</version><executions><execution><id>print-custom-info</id><phase>package</phase><configuration><tasks><!--suppress UnresolvedMavenProperty --><echo message="[INFO] ${environment} 环境打包执行成功"/></tasks></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build>

有两个需要注意的点
首先第一个打包时跳过测试的配置
在这里插入图片描述
这样我们在打包生产环境时的命令

mvn clean package -Pprod

而不是下面的,去掉了 -Dmaven.test.skip=true

mvn clean package -Pprod -Dmaven.test.skip=true

第二个分割符解析
在这里插入图片描述
这里的配置实际上是为了识别下面配置的@符号,从环境变量中读取具体哪个环境
在这里插入图片描述
注:上面的@符号可以换成其他的符号分割比如*或者&,一般还是不换比较好

三、IDEA启动调整

以上配置好后,IDEA启动就无法启动了,发现无法识别主配置里的自定义变量
在这里插入图片描述
这个是我们打包时候用到的,IDEA启动自然无法识别,打开右侧的maven配置,会发现多了几个配置文件(native 和nativeTest这两个是maven自己生成的不用管),我们勾选上dev
在这里插入图片描述
再次点击启动,发现启动成功了,这个主要是我们自己开发本地测试时使用
在这里插入图片描述
当你有使用其他环境,比如使用test环境启动的需求时,把dev勾选取消,仍然还有灰色的暗勾选,此时maven没有自动刷新。勾选上test后,点击左上角的刷新按钮,就会变成如下界面
在这里插入图片描述
再次启动,就会使用测试环境配置启动了
在这里插入图片描述

四、指定环境打包

有了以上的环境配置准备,我们就可以在打包时指定配置,而不是运行时指定配置环境了,笔者使用的时idea开发,进入terminal控制台输入如下命令,打包开发环境配置的jar包

mvn clean package -Pprod

在这里插入图片描述
在这里插入图片描述
看到打包成功了

五、启动jar包

windows下使用cmd命令进入打包后的项目target目录下执行

java  -jar execute-batch-0.0.1-SNAPSHOT.jar

在这里插入图片描述
启动成功了,我们的生产环境端口号正是7788
在这里插入图片描述
postman调用下接口
在这里插入图片描述
到这里maven多环境打包配置完成了

六、完整pom文件

笔者这里附上完整的pom文件内容,可供复制参考,主要是 < b u i l d > < / b u i l d > <build></build> <build></build> < p r o f i l e s > < / p r o f i l e s > <profiles></profiles> <profiles></profiles>中的配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.execute.batch</groupId><artifactId>execute-batch</artifactId><version>0.0.1-SNAPSHOT</version><name>execute-batch</name><description>execute-batch</description><properties><java.version>21</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>3.0.3</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>2.0.1.Final</version></dependency></dependencies><!-- 打包需要引入对应环境的配置文件 --><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!--打包时跳过测试--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>3.1.2</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><executions><execution><id>default-resources</id><phase>package</phase><goals><goal>copy-resources</goal></goals><configuration><outputDirectory>target/classes</outputDirectory><useDefaultDelimiters>false</useDefaultDelimiters><delimiters><delimiter>@</delimiter></delimiters><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/resources/</directory><filtering>true</filtering><includes><include>**/*.yaml</include></includes></resource><resource><directory>src/main/resources/</directory><excludes><exclude>**/*.yaml</exclude></excludes></resource></resources></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-antrun-plugin</artifactId><version>1.3</version><executions><execution><id>print-custom-info</id><phase>package</phase><configuration><tasks><!--suppress UnresolvedMavenProperty --><echo message="[INFO] ${environment} 环境打包执行成功"/></tasks></configuration><goals><goal>run</goal></goals></execution></executions></plugin></plugins></build><profiles><profile><!--不同环境Profile的唯一id--><id>dev</id><!--默认激活dev 环境--><activation><activeByDefault>true</activeByDefault></activation><properties><!--environment是自定义的字段(名字随便起),自定义字段可以有多个,确保与配置文件一致--><environment>dev</environment></properties></profile><profile><id>prod</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>prod</environment></properties></profile><profile><id>test</id><activation><activeByDefault>false</activeByDefault></activation><properties><environment>test</environment></properties></profile></profiles></project>

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

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

相关文章

matlab 图像的中值滤波

目录 一、功能概述1、算法概述2、主要函数3、计算公式二、代码实现三、结果展示四、参考链接本文由CSDN点云侠翻译,放入付费专栏只为防不要脸的爬虫。专栏值钱的不是本文,切勿因本文而订阅。 一、功能概述 1、算法概述 中值滤波是图像处理中一种常用的非线性运算,用于减少…

间接平差——以水准网平差为例 (python详细过程版)

目录 一、原理概述二、案例分析三、代码实现四、结果展示本文由CSDN点云侠原创,间接平差——以水准网平差为例 (python详细过程版),爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、原理概述 间接平差的函数模型和随机模型…

openai api的初次尝试

不懂已经不去百度了&#xff0c;现在直接问chatgpt就解决绝大多数问题了。 OpenAI API目前还没有官方支持的npm库&#xff0c;但是您可以使用现有的第三方npm库进行OpenAI API的访问和使用。这里提供一个npm库 openai-node 的安装和使用方法&#xff1a; 在命令行或终端中使用…

区块链会议投稿资讯CCF A--USENIX Security 2025 截止9.4、1.22 附录用率

会议名称&#xff1a;34th USENIX Security Symposium CCF等级&#xff1a;CCF A类学术会议 类别&#xff1a;网络与信息安全 录用率&#xff1a;2023年接收率29%&#xff0c;2024录用的区块链相关文章请查看 Symposium Topics System security Operating systems security …

vue实现可拖拽移动悬浮球

封装悬浮球组件&#xff0c;文件名s-icons.vue <template><div ref"icons" class"icons-container" :style"{ left: left px, top: top px }"><slot></slot></div> </template> <script> export …

国产化服务器开启NTP功能并向NTP时钟服务器同步

1.备份/etc/chrony.conf文件&#xff1b; cp -rp /etc/chrony.conf /etc/chrony.conf.bak.20240522 2.修改chrony.conf文件&#xff0c;增加NTP时钟信息。&#xff08;客户端填写时钟同步服务器的IP地址或者域名&#xff0c;我这里写的IP地址。下面Allow NTP Client是只允许…

数字图像处理冈塞雷斯第四版课后习题答案【英文原版】

第二章 第三章 . 第四章 傅里叶变换是一个线性过程&#xff0c;而计算梯度的平方根和平方根则是非线性运算。傅里叶变换可以用来计算微分的差值(如问题4.50)&#xff0c;但必须在空间域中直接计算平方和平方根值。 (a)实际上&#xff0c;由于高通操作&#xff0c;环有一个暗中心…

留守儿童|基于SprinBoot+vue的留守儿童爱心网站(源码+数据库+文档)

留守儿童爱心网站 目录 基于SprinBootvue的留守儿童爱心网站 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&…

STM_HAL_TIM_IC_(输入捕获,捕获PWM波)

介绍 TM32微控制器提供了输入捕获&#xff08;Input Capture&#xff09;功能&#xff0c;这是一种用于精确测量外部信号脉冲宽度和周期的强大技术。输入捕获通常与定时器&#xff08;如TIM&#xff09;的高级控制定时器&#xff08;TIM1和TIM8&#xff09;或通用定时器&#…

JavaEE-文件IO2

文章目录 前言一、字节流1.1 读文件1.2 写文件 二、字符流2.1 读文件2.2 写文件 三、文件IO三道例题 前言 在这里对Java标准库中对文件内容的操作进行总结&#xff0c;总体上分为两部分&#xff0c;字节流和字符流&#xff0c;就是以字节为单位读取文件和以字符为单位读取文件…

[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是来自 labs.google 的最新实验&#xff0c;您可以查看音乐效果和图像效果的新更新&#xff0c;现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能&#xff0c;以更好地理解这些生成…

cmake使用交叉编译工具链并验证

目录 一、内容 二、配置 1. 准备cmake文件 2. 使用交叉编译 三、验证 1. 构建阶段验证 2. 编译阶段验证 一、内容 目的&#xff1a;在X86环境下编译ARM平台软件 编写交叉编译配置文件&#xff1a;xx.cmake 执行cmake命令时指定&#xff1a;cmake \ -DCMAKE_TOOLCHAIN_F…

K8S认证|CKA题库+答案| 12. 查看Pod日志

目录 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 题目&#xff1a; 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、提取错误日志 3&#xff09;、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 百度…

简单的UDP网络程序:多人群聊系统

本章重点 能够实现一个简单的udp客户端/服务器; 1.创建套接字 我们把服务器封装成一个类&#xff0c;当我们定义出一个服务器对象后需要马上初始化服务器&#xff0c;而初始化服务器需要做的第一件事就是创建套接字。 ⭐参数说明&#xff1a; domain&#xff1a;创建套接字的域…

Nginx代理配置(专业版)

写在前面提醒&#xff1a;使用代理&#xff0c;如果可以&#xff0c;请尽量支持双协议&#xff0c;http、https均要支持哈。 注意&#xff1a;监控系统只是运行代码&#xff0c;是否支持https&#xff0c;需要运维同学在你们的服务器上配置https证书&#xff0c;配置好证书&…

在 CentOS 上安装 PostgreSQL 的全面指南

PostgreSQL 是一种功能强大的开源关系型数据库管理系统&#xff0c;广泛应用于各种领域。它提供了诸如事务处理、并发控制和数据完整性等高级功能&#xff0c;因此深受开发者和企业的欢迎。本指南将逐步引导您在 CentOS 上安装 PostgreSQL&#xff0c;以便您充分利用其众多优势…

决定了,将ChatGPTer开源!主打一个大模型人人可用。

一个快速上手且极易部署的类ChatGPT开源应用&#xff0c;可接入 OPENAI API 或 通义千问API 开源地址&#xff1a; https://github.com/isnl/EsChat 大声(偷偷)告诉你&#xff1a;通义千问有免费API额度可白嫖&#xff01;&#xff01;&#xff01; 版本特性 OPENAI 和 通义千…

利用英特尔 Gaudi 2 和至强 CPU 构建经济高效的企业级 RAG 应用

检索增强生成 (Retrieval Augmented Generation&#xff0c;RAG) 可将存储在外部数据库中的新鲜领域知识纳入大语言模型以增强其文本生成能力。其提供了一种将公司数据与训练期间语言模型学到的知识分开的方式&#xff0c;有助于我们在性能、准确性及安全隐私之间进行有效折衷。…

任推邦:实力强劲的APP推广拉新平台,号称不扣量

任推邦简介 任推邦是国内数一数二的项目分发平台&#xff0c;也是一个不扣量的项目APP推广拉新平台&#xff0c;隶属于聚名科技集团股份有限公司。聚名科技成立时间在2012年&#xff0c;是安徽省老牌互联网企业&#xff0c;历经11年的飞速发展&#xff0c;聚名科技成功布局打造…

小程序的这些知识你知道吗?

一:导航传参 无论是编程式还是声明式导肮传参都是在url?keyvalue&key1value1,无论是否是tabbar页面. 对于回退页面,没办法传参. 这个参数是,跳转到页面的时候,跳转到另一个页面,这个页面就是刚开始执行,等数据执行之后,触发onload,传递的参数放在内存中,跳转是内部底层触…