需求:
在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。
maven提供了一种方便的解决这种问题的方案,就是profile功能。
实现效果展示
- 开发环境打包:
mvn clean package -Pdev
- 测试环境打包
mvn clean package -Pbeta
- 生产环境打包
mvn clean package -Prelease
如何实现
应用到的技术点
maven提供的profile,filter
基本技术原理
其实,从本质上来说,就是采用了模板和占位符替换的基本技术。用一句話來概括, 就是字符的替換。
注意事项
application.xml文件中不能出现@关键字,就算你注释了也不行。当出现@了,之后的所有环境变量将不会被注入
源码展示
pom文件中的filter配置
<build>
<finalName>spring-mybatis</finalName>
<!-- 定义了变量配置文件的地址 -->
<filters>
<filter>${project.basedir}/src/main/resources/filters/application-${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
</plugin>
</plugins>
</build>
filters 的意义在于,表明使用该文件(s)中定义的值來替換目標字符。(From whom)
resources/resource ,表示替換會對在哪個目錄下的文件作用。 (To whom)
大家可能也會對${env} 有疑问。這個就是动态配置的关键之一。”profiles”
pom中的profile配置
<profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>false</activeByDefault>
</activation>
</profile>
<profile>
<!-- 发布环境 -->
<id>release</id>
<properties>
<env>release</env>
</properties>
</profile>
<profile>
<!-- 测试环境 -->
<id>beta</id>
<properties>
<env>beta</env>
</properties>
<activation>
<!-- 设置默认激活这个配置 -->
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
需要进行动态配置的Properties文件(模板)
datasource.jdbcUrl=${env.datasource.jdbcUrl}
datasource.username=${env.datasource.username}
datasource.password=${env.datasource.password}
源码下载
在本机装有git的情况下:
运行
git clone git@github.com:bill4j/maven-showcase.git
如果还没有git,请访问我的GitHub:
如何运行源码中的工程?
准备工作:数据库脚本准备
使用MySQL建立3个环境的数据库,分别执行以上脚本
步骤一:maven运行打包命令
- 开发环境打包:
mvn clean package -Pdev
- 测试环境打包
mvn clean package -Pbeta
- 生产环境打包
mvn clean package -Prelease
-P 就是選擇對應在pom中聲明了的profile,想要使用哪个环境,就在-P后边写你要使用的环境即可