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.OracleDriver
    type: 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的环境配置来构建项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值