参考文档:
maven(三)最详细的profile的使用
maven profile动态选择配置文件
1. 前言
在开发过程中,我们的项目会存在不同的运行环境,比如开发环境、测试环境、生产环境,而我们的项目在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。
在前面的文章springboot 多个配置文件,springboot 为我们提供了一种解决方案,而 maven 也提供了一种更加灵活的解决方案,就是 profile 功能。
2. 原理
2.1 profile 定义
先看一段 pom 文件中的 profile 定义
<profiles>
<profile>
<!--不同环境Profile的唯一id-->
<id>dev</id>
<properties>
<!--profiles.active是自定义的字段(名字随便起),自定义字段可以有多个-->
<profiles.active>dev</profiles.active>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
可以看到定义了多个 profile,每个 profile 都有唯一的 id,也包含 properties 属性。这里为每个 profile 都定义一个名为 profiles.active 的 properties,每个环境的值不同。当我们打包项目时,激活不同的环境,profiles.active字段就会被赋予不同的值。
2.2 项目目录
2.3 关键配置
配置完 profiles 后,我们还需要在 pom 中配置 resources 和 filters
<build>
<!-- 根据被激活的 profiles.active 来选择配置文件 -->
<filters>
<filter>src/main/resources/application-${profiles.active}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<!--是否使用参数值代替参数名。参数值取自properties元素或者文件里配置的属性,文件在filters元素里列出。 -->
<filtering>true</filtering>
<!-- 打包时排除环境配置文件 -->
<excludes>
<exclude>**/application-*.properties</exclude>
</excludes>
</resource>
</resources>
</build>
2.4 激活 profile
激活 profile 的方式有很多种
默认激活
<activeByDefault>true</activeByDefault>
当没有指明要激活哪个 profile 时,默认激活这个。
maven 命令激活
即在使用 maven 打包时通过 -P 参数,-P 后跟上 profile 的唯一 id,如
mvn package -Ptest
通过 pom 文件里的 activation 属性
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
<!--activation用来指定激活方式,可以根据jdk环境,环境变量,文件的存在或缺失-->
<activation>
<!--配置默认激活-->
<activeByDefault>true</activeByDefault>
<!--通过jdk版本-->
<!--当jdk环境版本为1.5时,此profile被激活-->
<jdk>1.5</jdk>
<!--当jdk环境版本1.5或以上时,此profile被激活-->
<jdk>[1.5,)</jdk>
<!--根据当前操作系统-->
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
<!--通过系统环境变量,name-value自定义-->
<property>
<name>env</name>
<value>test</value>
</property>
<!--通过文件的存在或缺失-->
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
<exists/>
</file>
</activation>
</profile>
settings.xml 中使用 activeProfiles 指定(了解即可)
即 mave 目录下的 settings.xml 也可以添加下面的代码来指定激活哪个 profile。
<activeProfiles>
<activeProfile>profileTest1</activeProfile>
</activeProfiles>
2.5 配置文件引用变量
比如在 profile 中声明 server.port
<profiles>
<profile>
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
<server.port>8080</server.port>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
springBoot 项目可以使用声明的变量
server:
port: @server.port@
其他项目可以通过 ${server.port}
引用