使用maven中的profile动态打包不同环境的配置文件

maven中的profile可以在打包时动态选择不同的配置文件进行打入,在项目具有开发、测试、生产环境时可以更方便优雅的进行不同环境的打包运行
示例图:在这里插入图片描述

1-配置profile

第一步需要为每个环境配置一个profile标签,在pom文件中进行配置。我这里只演示dev和test的环境配置

    <profiles><profile><id>dev</id> <!--给每个环境一个唯一的id--><properties><!--在这个标签中配置你的自定义变量,下面的env就是我自己定义的--><env>dev</env></properties><activation><activeByDefault>true</activeByDefault><!--默认激活的环境--></activation></profile><profile><id>test</id><properties><env>test</env></properties></profile></profiles>

这里需要说明的是自定义的变量,这个变量可以在pom文件中的其他地方以${标签名}的形式进行引用,同时也可以在springboot的配置文件中进行引用,在springboot的配置文件中进行引用时,使用@标签名@进行引用

2-配置需要进行打包的文件

当我们配置好环境之后,需要在pom里新建resources标签进行根据指定环境打包指定配置文件的处理

        <resources><resource><directory>src/main/resources</directory><!--指定资源文件夹--><includes><include>**/*.properties</include><!--将该资源文件夹下的properties文件全部打包--></includes><excludes><exclude>**/payConfig/**</exclude><!--这里排除payConfig文件夹,也就是说该文件夹中的文件不会被打包,因为这个文件夹下的配置文件需要动态处理--></excludes><filtering>false</filtering><!--这些资源文件将保持原样,不会进行任何替换或修改操作--></resource><resource><directory>src/main/resources</directory><includes><include>application-${env}.yml</include><!--这里使用占位符进行动态引用以确定具体的打包文件--><include>application.yml</include><!--主配置文件必须打包--></includes><filtering>true</filtering><!--开启过滤,在打包时env将被确定到底是什么变量--></resource><resource><directory>src/main/resources</directory><includes><include>config/payConfig/aliPay/${env}/*.properties</include><include>config/payConfig/wxPay/${env}/*.properties</include></includes><filtering>true</filtering><!--同上,使用占位符确定payConfig中的支付配置文件--></resource></resources>

提示1:filtering标签用于指定是否对资源文件进行过滤处理。
当一个资源文件需要在构建期间进行替换或修改时,可以使用过滤机制。例如,将属性值注入到配置文件中,或根据环境对资源文件进行不同的配置。
提示2:** 表示多级目录匹配。* 表示一级目录匹配。

3-配置SpringBoot配置文件

在这里插入图片描述
可以看到配置文件中使用了@env@占位符进行配置,也就是说,我们只有在使用maven进行编译的时候才确定到底是什么值,由于在第二步中已经在pom中开启了过滤,所以在打包时占位符将被替换

4-编译测试

我不使用默认的dev环境,手动选择test进行编译
在这里插入图片描述
在这里插入图片描述
下面是编译后的文件结构
在这里插入图片描述
可以看到成功将test环境的文件进行编译,其他不包含,并且application.yml中的值也被替换
在这里插入图片描述

大功告成

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

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

相关文章

Python———运行环境搭建

不管用什么工具开发 Python 程序&#xff0c;都必须安装 Python 的运行环境。 目前最常用的是Windows 、 Linux 平台。这里 我们以Windows10为主讲解。 其实编程和平台关系不大。大家也可以使用Linux、Mac。 Windows 平台下 Python 环境搭建 第一步&#xff1a;进入 python 官…

Java爬虫与Python爬虫有什么区别

Java爬虫和Python爬虫是两种常见的网络爬虫实现方式&#xff0c;它们在语言特性、开发环境和生态系统等方面存在一些区别。 1. 语言特性&#xff1a;Java是一种面向对象的编程语言&#xff0c;而Python是一种脚本语言。Java较为严谨&#xff0c;需要明确定义类、方法和变量&…

Python如何免费获取付费文档的数据, 保存word文档

目录标题 前言开发环境:模块使用:代码实现步骤:代码展示尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 开发环境: python 3.8 pycharm 模块使用: requests --> pip install requests re json time base64 docx --> pip install python-docx 第三方模…

5.4、docker-compose

h ttps://www.runoob.com/docker/docker-compose.html Docker Compose docker-compose.yml 配置文件编写详解_docker-compose.yml 编写_种子选手的博客-CSDN博客 docker-compose.yml 配置文件编写详解 1.dockerfile: 构建镜像&#xff1b; 2.docker run: 启动容器&#xff1b;…

哈工大计算机网络课程网络层协议详解之:互联网控制报文协议(ICMP)

哈工大计算机网络课程网络层协议详解之&#xff1a;互联网控制报文协议&#xff08;ICMP&#xff09; 在互联网中&#xff0c;IP数据报的传输很容易出现差错&#xff0c;当出现差错时&#xff0c;最简单的处理办法就是对该IP数据报进行丢弃。但是&#xff0c;并不是直接丢弃就…

视频与AI,与进程交互(二) pytorch 极简训练自己的数据集并识别

目标学习任务 检测出已经分割出的图像的分类 2 使用pytorch pytorch 非常简单就可以做到训练和加载 2.1 准备数据 如上图所示&#xff0c;用来训练的文件放在了train中&#xff0c;验证的文件放在val中&#xff0c;train.txt 和 val.txt 分别放文件名称和分类类别&#xff…

Redis之数据类型String、List、Hash、Set、Sorted Set(详细)

一、String数据类型 1、SET/GET/APPEND/STRLEN &#xff08;1&#xff09; APPEND &#xff08;2&#xff09; SET/STRLEN 2、 INCR/ DECR/INCRBY/DECRBY &#xff08;1&#xff09;INCR/ DECR &#xff08;2&#xff09; INCRBY/DECRBY INCRBY key increment&#xff1…

selenium通过xpath定位text换行的元素

DOM元素&#xff08;该元素是换行的&#xff0c;不能通过普通xpath定位&#xff09;&#xff1a; 可使用下面xpath定位该div //div[./text()/following-sibling::text()"点" and ./text()"5"] 解释一下就是&#xff1a;定位“子节点的text是[5] 且 子节点…

【Java项目】解决请求路径上明文ID传输导致可能被攻击的方法

文章目录 问题思路解决 问题 这个问题是我公司的一个小业务问题&#xff0c;问题来源于我们发送请求的时候&#xff0c;请求路径上携带的是明文&#xff0c;比如http://xxx/xxx/id12345&#xff0c;那么别有用心的人就可能会推测出id的生成策略&#xff0c;导致遍历id&#xf…

Qt编写视频监控系统79-四种界面导航栏的设计

一、前言 最初视频监控系统按照二级菜单的设计思路&#xff0c;顶部标题栏一级菜单&#xff0c;左侧对应二级菜单&#xff0c;最初采用图片在上面&#xff0c;文字在下面的按钮方式展示&#xff0c;随着功能的增加&#xff0c;二级菜单越来越多&#xff0c;如果都是这个图文上…

数据库表的操作

目录 前言 1.创建表 2.查看表 2.1查看表结构 2.2查看表中插入的数据 3.修改表 4.删除表 总结 前言 前面已经介绍了对数据库的操作&#xff0c;今天我们介绍的是数据库表的操作&#xff0c;数据库表简单可以理解为存储数据的介质。有了这个认识之后&#xff0c;下面我们…

21.RocketMQ源码之NameServer的路由管理和架构设计

highlight: arduino-light NameServer 路由管理 Broker消息服务器在启动的时向所有NameServer注册。 消息生产者Producer在发送消息之前先从NameServer获取Broker服务器地址列表然后根据负载均衡算法从列表中选择一台服务器进行发送。 NameServer与每台Broker保持长连接&#x…