Maven配置集profile

在开发场景中,通常有dev、sit和prod三个环境,分别对应开发、内部测试和生产。
在不同的环境中,因为数据、资源等隔离需要,往往需要不同的配置,这样在部署项目的时候就有着多套配置集灵活选择的需求(避免手动修改的繁琐操作)。
Maven中的profiles配置集就是很好的一个解决方案,需要那个配置就指定激活那个配置。

profile配置集

	<profiles><!--基本配置--><profile><id>base</id> <properties></properties><activation><!--默认激活此配置集--><activeByDefault>true</activeByDefault></activation><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><systemPropertyVariables><API_GW_xxx_SECRET_TOKEN>${apigw.com.secret.token}</API_GW_xxx_SECRET_TOKEN><API_GW_yyy_SECRET_TOKEN>${apigw.cstk.secret.token}</API_GW_yyy_SECRET_TOKEN><API_GW_zzz_SECRET_TOKEN>${apigw.dmgfe.secret.token}</API_GW_zzz_SECRET_TOKEN><MY_DB_USERNAME>${dmg.db.username}</MY_DB_USERNAME><MY_DB_PASSWORD>${dmg.db.password}</MY_DB_PASSWORD><MY_DB_URL>${dmg.db.jdbc.url}</MY_DB_URL><MY_DB_INITIAL_POOL_SIZE>${dmg.db.init.pool.size}</DMG_DB_INITIAL_POOL_SIZE><MY_DB_MIN_POOL_SIZE>${dmg.db.min.pool.size}</MY_DB_MIN_POOL_SIZE><MY_DB_MAX_POOL_SIZE>${dmg.db.max.pool.size}</MY_DB_MAX_POOL_SIZE><KAFKA_HOST>${kafka.host}</KAFKA_HOST><KAFKA_ORDER_STATUS_CHANGE_TOPIC>${kafka.topic.delivery-status-change}</KAFKA_ORDER_STATUS_CHANGE_TOPIC><KAFKA_INTERNAL_TOPIC>${kafka.topic.delivery-status-change-internal}</KAFKA_INTERNAL_TOPIC><LIS_FTP_USERNAME>${lis.ftp.username}</LIS_FTP_USERNAME><LIS_FTP_PASSWORD>${lis.ftp.password}</LIS_FTP_PASSWORD><LIS_FTP_HOST>${lis.ftp.host}</LIS_FTP_HOST><LIS_FTP_HOME_DIR>${lis.ftp.home.dir}</LIS_FTP_HOME_DIR></systemPropertyVariables></configuration></plugin></plugins></build></profile><!-- dev 环境 --><profile><id>dev</id><properties><java.options></java.options><replica.count>1</replica.count><route.name>echoo.dev.com</route.name><spring.profiles.active>dev</spring.profiles.active><namespace>test-dev</namespace></properties><build><plugins><plugin><groupId>org.eclipse.jkube</groupId><artifactId>openshift-maven-plugin</artifactId><configuration><access><namespace>ruby-delivery-sit</namespace><masterUrl>https://master.ocp.echoo.com:8443</masterUrl><apiVersion>v1</apiVersion></access><resources><replicas>1</replicas></resources></configuration></plugin></plugins></build></profile><!-- sit 环境 --><profile><id>sit</id></profile><!-- prod环境 --><profile><id>prod</id></profile></profiles>

几个常用属性:

			<activation><!--默认激活此配置集--><activeByDefault>true</activeByDefault></activation>

<activation>是激活属性,里面配置一些 profile 的激活相关的配置。
<activeByDefault>true</activeByDefault>是默认激活配置。true 表示这个 profile 默认是激活的,除非在命令行或其他地方明确指定了不激活它,相反 false 就表示默认不激活,除非指定激活。通常用来配置一些基本项。

			<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><systemPropertyVariables><API_GW_xxx_SECRET_TOKEN>${apigw.com.secret.token}</API_GW_xxx_SECRET_TOKEN><API_GW_yyy_SECRET_TOKEN>${apigw.cstk.secret.token}</API_GW_yyy_SECRET_TOKEN><API_GW_zzz_SECRET_TOKEN>${apigw.dmgfe.secret.token}</API_GW_zzz_SECRET_TOKEN><MY_DB_USERNAME>${dmg.db.username}</MY_DB_USERNAME><MY_DB_PASSWORD>${dmg.db.password}</MY_DB_PASSWORD><MY_DB_URL>${dmg.db.jdbc.url}</MY_DB_URL><MY_DB_INITIAL_POOL_SIZE>${dmg.db.init.pool.size}</DMG_DB_INITIAL_POOL_SIZE><MY_DB_MIN_POOL_SIZE>${dmg.db.min.pool.size}</MY_DB_MIN_POOL_SIZE><MY_DB_MAX_POOL_SIZE>${dmg.db.max.pool.size}</MY_DB_MAX_POOL_SIZE><KAFKA_HOST>${kafka.host}</KAFKA_HOST><KAFKA_ORDER_STATUS_CHANGE_TOPIC>${kafka.topic.delivery-status-change}</KAFKA_ORDER_STATUS_CHANGE_TOPIC><KAFKA_INTERNAL_TOPIC>${kafka.topic.delivery-status-change-internal}</KAFKA_INTERNAL_TOPIC><LIS_FTP_USERNAME>${lis.ftp.username}</LIS_FTP_USERNAME><LIS_FTP_PASSWORD>${lis.ftp.password}</LIS_FTP_PASSWORD><LIS_FTP_HOST>${lis.ftp.host}</LIS_FTP_HOST><LIS_FTP_HOME_DIR>${lis.ftp.home.dir}</LIS_FTP_HOME_DIR></systemPropertyVariables></configuration></plugin></plugins></build>

<build>是项目构建属性,里面配置与项目构建相关的配置。
<plugins>是插件属性,里面配置插件。比如这里配置了一个spring-boot-maven-plugin,用来打包springboot项目。
<configuration>是插件的配置属性,与对应的插件绑定。
<systemPropertyVariables>是系统属性,这里自定义了很多系统属性,这些属性通常包含外部依赖的配置信息,如数据库连接、API 密钥、外部服务URL等。
这些属性在运行时可以通过 Java 的 System.getProperty() 方法访问,也可以在项目配置文件中以引用的方式${property-name}直接获取,比如:

spring:datasource:username: ${MY_DB_USERNAME}password: ${MY_DB_PASSWORD}url: ${MY_DB_URL}driver-class-name: oracle.jdbc.driver.OracleDrivertype: oracle.ucp.jdbc.PoolDataSource
		<!-- dev 环境 --><profile><id>dev</id><properties><java.options></java.options><replica.count>1</replica.count><route.name>echoo.dev.com</route.name><spring.profiles.active>dev</spring.profiles.active><namespace>test-dev</namespace></properties><build><plugins><plugin><groupId>org.eclipse.jkube</groupId><artifactId>openshift-maven-plugin</artifactId><configuration><access><namespace>ruby-delivery-sit</namespace><masterUrl>https://master.ocp.echoo.com:8443</masterUrl><apiVersion>v1</apiVersion></access><resources><replicas>1</replicas></resources></configuration></plugin></plugins></build></profile>

<java.options></java.options>: Java选项属性,为了在将来的配置中设置JVM的启动选项。
<replica.count>1</replica.count>: 指定应用的副本数量为1。
<route.name>echoo.dev.com</route.name>: 定义路由名称(应用的访问URL)。
<spring.profiles.active>sit</spring.profiles.active>: 这告诉 Spring 框架要激活名为 sit 的Spring profile。
<namespace>ruby-delivery-sit</namespace>: 指定 OpenShift 中的命名空间(namespace),应用将在此命名空间中部署。
这里配置了一个 OpenShift 的 Maven 插件,用于

<configuration>: OpenShift 插件的配置部分。
<access>: OpenShift集群的访问配置。
<namespace>: 与上面提到的<properties>中的<namespace>相同,再次定义了OpenShift的命名空间。
<masterUrl>: OpenShift 集群的主URL,后续就通过这个URL把项目推上容器。
<apiVersion>: OpenShift API 的版本。
<resources>: OpenShift 资源配置。
<replicas>: 定义了应用的副本数量,与<properties>中的<replica.count>相对应。

配置参数来源

<MY_DB_USERNAME>${my.db.username}</MY_DB_USERNAME>

这里的${my.db.username}的真实值可以有多种来源:

  1. Maven 属性文件:
    Maven 的 settings.xml 文件中可以定义属性。
    pom.xml 文件的 <properties> 标签内,也可以定义属性。这些属性可以在整个 pom.xml 文件中通过 ${property-name}的形式引用。
  2. Maven 命令行参数:
    使用 -D 参数可以在 Maven 命令行中自定义属性。例如:
    mvn clean install -Dmy.db.username=your-value
  3. 外部属性文件:
    可以使用 maven-resources-plugin 或其他插件来从外部文件(如 .properties 文件)加载属性。这通常用于从版本控制系统中管理的文件中读取敏感信息,如数据库凭据。
  4. 等等…

mvn打包指定profile

mvn -DskipTests -P dev clean package

-P dev表示指定激活id为dev的配置集。
这样maven就会用dev的环境配置来构建项目。

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

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

相关文章

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

基础知识要求&#xff1a; Java&#xff1a;方法、while循环、for循环 Python&#xff1a; 方法、while循环、for循环 题目&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a;head […

论Java和C++方向选择

目录 1.难度2.就业压力3.岗位选择4.薪资待遇5.选择建议小结 1.难度 Java &#xff0c;C&#xff0c; 测开&#xff0c;整体来说三个方向难度相当。 1.仅从语法角度来看&#xff0c;c 是掌控一切&#xff0c;知识都要懂一点&#xff0c;而java的特点在于省心&#xff0c;都封装…

【C++小语法】引用和内联函数(完结篇)

在使用C语言编程过程中&#xff0c;C语言的要求之严格&#xff0c;编程过程之繁琐&#xff0c;大同小异的重复性工作&#xff0c;令C之父使用C语言编程时也深受其扰&#xff0c;于是乎C兼容C小语法诞生了 一、引用 1.引用概念 在C中&#xff0c;引用&#xff08;Reference&am…

【Android踩坑】 Constant expression required

gradle 8&#xff0c;报错 Constant expression required&#xff1a;意思是case语句后面要跟常量 解决1 单击switch语句&#xff0c;键盘按下altenter&#xff0c;将switch-case语句替换为if-else语句(或者手动修改) 解决2 在gradle.properties中添加 android.nonFinalRes…

【卫星影像三维重建随记】obj模型及其纹理材质文件介绍

obj模型及纹理材质介绍 1.介绍1.1 背景1.2 带有纹理色彩的obj三维模型 2.带有纹理信息obj三维模型文件解析2.1 三维模型数据2.2 obj文件内容2.3mtl文件内容 3 参考 1.介绍 1.1 背景 OBJ格式是一种简单且通用的三维模型文件格式&#xff0c;支持多边形网格和基本的几何体类型&…

leetcode.K站中转(python)

开始准备用dfs深度搜索&#xff0c;发现n100&#xff0c;dfs可能会超时&#xff0c;即使用了剪枝。 class Solution:def findCheapestPrice(self, n: int, flights: List[List[int]], src: int, dst: int, k: int) -> int:length k 2ans float(inf)rec []vis [True]*n…

0514媒体处理面试题

编程&#xff1a;将给定字符串中的数字逆序&#xff0c;比如 abc2319bcj453 逆序后为 abc3549bcj132 思路&#xff1a; &#xff08;1&#xff09;双指针 &#xff08;2&#xff09;栈 #include "stdio.h" #include <iostream> #include <string> #in…

Golang RPC实现-day01

导航 Golang RPC实现一、主体逻辑设计二、服务设计1、监听和接收请求2、处理请求(1)服务结构体定义(2)确认请求方和服务方编解码格式(3)循环读取请求(4)解析请求的内容(5)响应请求 三、读取和发送数据到连接中代码 Golang RPC实现 先来一个最简单的版本&#xff0c;后续更新。…

深入解析Java移位运算符

移位运算符是 Java 中常见的位操作符&#xff0c;主要包括左移&#xff08;<<&#xff09;、带符号右移&#xff08;>>&#xff09;和无符号右移&#xff08;>>>&#xff09;。这些运算符在性能优化、低级编程、数据压缩等领域广泛应用&#xff0c;理解和…

Qt学习笔记1.3.4 QtCore-Qt资源系统

文章目录 资源收集文件(.qrc)外部二进制资源内编译(compiled-in)资源压缩使用应用程序中的资源使用库中的资源 Qt资源系统是一种 独立于平台的机制&#xff0c;用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序总是需要一组特定的文件(图标、翻译文件等)&#x…

QT状态机8-使用恢复策略自动恢复属性

当状态分配的属性不再活动时,可能希望将其恢复到初始值,通过设置全局的恢复策略可以使状态机进入一个状态而不用明确制定属性的值。 QStateMachine machine; machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);当设置了恢复策略以后,状态机将自动恢复所有…

sklearn中多分类和多标签分类评估方法总结

一、任务区分 多分类分类任务&#xff1a;在多分类任务中&#xff0c;每个样本只能被分配到一个类别中。换句话说&#xff0c;每个样本只有一个正确的标签。例如&#xff0c;将图像分为不同的物体类别&#xff0c;如猫、狗、汽车等。 多标签分类任务&#xff1a;在多标签分类任…

助力数字农林业发展服务香榧智慧种植,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建香榧种植场景下香榧果实检测识别系统

作为一个生在北方但在南方居住多年的人&#xff0c;居然头一次听过香榧&#xff08;fei&#xff09;这种作物&#xff0c;而且这个字还不会念&#xff0c;查了以后才知道读音&#xff08;fei&#xff09;&#xff0c;三声&#xff0c;这着实引起了我的好奇心&#xff0c;我相信…

Linux端口状态含义

目录 前言1. 前沿知识2. 基本知识 前言 在面试或者企业实战中常见的命令 那就是查询端口命令是哪个 1. 前沿知识 查询端口命令&#xff1a;lsof -i 查询端口的状态&#xff1a;netstat 命令参数说明-tTCP端口-uUDP端口-p进程表示符和程序名称-n显示IP 常用的netstat结合g…

MATLAB基础应用精讲-【数模应用】多选题分析

目录 几个高频面试题目 设计问卷及数据分析 SPSSAU多选题分析常见问题

百度网盘搭建知识付费系统,绘画网课怎么招生?招生怎么出效果?

现在的小孩真的是多才多艺&#xff0c;各种爱好都有等级证书&#xff0c;当然&#xff0c;这也就离不开家长报班的培养&#xff0c;尤其是&#xff0c;现在的绘画课程也是很受欢迎的&#xff0c;那作为绘画网课课程学校要怎么招生?这也是学校常年的目标之一。 招生怎么出效果?…

STM32使用ADC单/多通道检测数据

文章目录 1. STM32单片机ADC功能详解 2. AD单通道 2.1 初始化 2.2 ADC.c 2.3 ADC.h 2.4 main.c 3. AD多通道 3.1 ADC.c 3.2 ADC.h 3.3 main.c 3.4 完整工程文件 1. STM32单片机ADC功能详解 STM32单片机ADC功能详解 2. AD单通道 这个代码实现通过ADC功能采集三脚电…

代码随想录三刷day51

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣200. 岛屿数量二、力扣695. 岛屿的最大面积三、力扣1020. 飞地的数量四、力扣130. 被围绕的区域 前言 依然是从地图周边出发&#xff0c;将周边空格相邻…

Vue学习v-on

Vue学习v-on 一、前言1、基本用法2、事件修饰符3、事件对象4、动态事件名5、事件修饰符和按键修饰符6、自定义事件 二、总结 一、前言 v-on 是 Vue.js 中用于监听 DOM 事件的指令。它可以在触发特定事件时执行指定的 JavaScript 代码或者调用 Vue 实例中的方法。下面我来详细介…

【Vue2】关于response返回数据的错误小记

关于Vue2中response返回数据的一个错误小记 如图&#xff0c;在这里返回的时候&#xff0c;后端是通过List< String >返回的&#xff0c;response接收到的实际上是一个Array数组&#xff0c;但是赋值给searchedTaskList的时候&#xff0c;需要在.then包括的范围里面赋值给…