在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。
maven
提供了一种方便的解决这种问题的方案,就是profile
功能。
profile
可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile
,然后每个profile
对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。
profile
定义的位置
(1) 针对于特定项目的profile
配置我们可以定义在该项目的pom.xml
中。(下面举例是这种方式)
(2)
(3)
Spring
的Profile
中,Profile
存在两种状态,一种为默认加载的profile(spring.profiles.default)
,一种为指定激活的profile(spring.profiles.active)
。如果程序未指定active
状态的profile
,那么执行default
状态的profile
,如果两种状态都指定,则优先执行或选择active
状态的profile
。
maven
的优点在于项目构建,通过命令来构建不同环境的包,
spring
则是通过初始化参数和设置环境变量来设置激活的profile
文件结构
pom.xml
配置
1、profile
配置
<profiles>
<!--开发环境-->
<profile>
<id>dev</id>
<properties>
<!-- package.environment 为自己定义的名字-->
<package.environment>dev</package.environment>
</properties>
<!-- 默认激活该profile节点-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--测试环境-->
<profile>
<id>pre</id>
<properties>
<package.environment>pre</package.environment>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>pro</id>
<properties>
<package.environment>pro</package.environment>
</properties>
</profile>
</profiles>
2、resources
配置
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>environment/dev/**</exclude>
<exclude>environment/pre/**</exclude>
<exclude>environment/pro/**</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources/environment/${package.environment}</directory>
</resource>
</resources>
</build>
以上配置会将src/main/resources
下除了<excludes>
标签下的文件编译进classpath
下。