文章目录
-
1. 摘要
-
2. 集成的意义
-
3. Maven
Filter
-
3.1. Filtering
-
3.2. Spring
Boot Resource 插件的默认配置
-
4. Spring
Boot Profile
-
4.1. Spring
Maven 默认配置
-
5. 集成
-
5.1. 工程结构
-
5.1.1. 演示实例的默认工程结构为:
-
5.1.2. jdbc.properties
-
5.1.3. application.properties
-
5.1.4. application-${profile}.properties
-
5.2. pom
中定义Profile 参数
-
5.3. 覆盖默认Resource
插件配置
-
5.4. Filter
的使用
-
5.5. 采用Maven
**Spring Profile
-
5.6. 打包部署
-
5.6.1. 运行Maven
指令打包
-
5.6.2. 结果查看
-
5.7. 源代码
-
5.8. 总结
-
6. 好书推荐
-
7. 参考
摘要
在现代的项目开发中多人协作、多环境部署已经是必不可少的软件开发方式,笔者目前正在开发的一个基于Spring Boot 项目环境就有四套之多,包括(本地、测试、演练、生产)。尤其是现代的大型项目开发,构建复杂、参与人数众多等因素,使得高效的构建工具必不可少。而Maven
正是这样的一款优秀的Java
工程构建工具。
本文主要介绍Maven
Profile
与Spring
Boot Profile
集成使用的方式。一句话概括就是两种类型的Profile
能够实现的功能既有不同也有交叉,本文的目的就是要充分的使用各自的优势实现项目的合理构建。
集成的意义
Maven
作为构建工具,其侧重的粒度更大一些,偏重与项目的整体环境配置、项目的依赖管理以及各种环境下的配置文件管理。当然Maven
也能够实现属性的配置。
Spring
Boot Profile
作为Spring
提供的功能,由Spring
最核心的IoC
功能可知,其更加侧重于Spring
Beans
的多环境配置以及属性字段的配置。
因而,集成的意义就在采用Maven
来实现多环境下的配置文件管理,依赖管理等,而Spring
Boot Profile
来实现属性,以及Spring Boot 自动装配的Bean 的属性的配置。
Maven
Filter
Filtering
Maven
Filter
是Maven
Resource
插件提供的利用环境变量、pom
文件定义的属性以及指定的*.properties
配置文件里的属性来替换其他文件中的占位符,如${jdbc.driverClassName}
。在本集成实例中就会分别读取不同Profile
下的数据库连接配置文件。替换application.properties
中的占位符。
Spring
Boot Resource 插件的默认配置
在构建基于Spring
Boot
项目时,就会继承自spring-boot-starter-parent
,查看该文件会得到如下内容:
1 2 3 4 5 6 7 8 9 10 11
|
<plugin> <groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-resources-pluginartifactId>
<version>2.6version>
<configuration>
<delimiters>
<delimiter>${resource.delimiter}delimiter>
delimiters>
<useDefaultDelimiters>falseuseDefaultDelimiters>
configuration>
plugin>
|
${resource.delimiter}
的值在该文件的开始位置已经将默认的$
修改为@
,定义如下:
1 2
|
<resource.delimiter>@resource.delimiter>
|
Spring
Boot Profile
Spring
Maven 默认配置
同理,在spring-boot-starter-parent
文件中,Spring
Boot
对Resource 进行了配置,包括需要被打包进jar&war
的application*
文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
<includes>
<include>**/application*.ymlinclude>
<include>**/application*.yamlinclude>
<include>**/application*.propertiesinclude>
includes>
resource>
<resource>
<directory>${basedir}/src/main/resourcesdirectory>
<excludes>
<exclude>**/application*.ymlexclude>
<exclude>**/application*.yamlexclude>
<exclude>**/application*.propertiesexclude>
excludes>
resource>
resources>
build>
|
从配置文件中可以看到Spring
Boot
对配置文件的默认打包设定。
集成
本次实现Spring
Boot Profile
与Maven
Profile
的集成主要有如下目的:
-
实现不同环境下(profile)将不同目录下的
jdbc.properties
文件打包到classpath
下
-
采用
jdbc.properties
文件中配置的数据库连接信息替换application.properties
文件中的通配符@*@
-
实现根据选中的
Maven
Profile
**Spring
Boot Profile
的属性spring.profiles.active
工程结构
演示实例的默认工程结构为:
Spring
Boot Maven Profile 集成项目结构
jdbc.properties
1 2 3 4
|
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=release
|
application.properties
application.properties
文件中需要被替换通配符的数据库连接信息:
1 2 3 4 5
|
# config datasource
[email protected]@
[email protected]@
[email protected]@
[email protected]@
|
application-${profile}.properties
每一个application-${profile}.properties
文件中都定义了一个属性:
1 2 3 4 5 6 7 8
|
# config dev properties self.hello=hello world dev # config release properties self.hello=hello world release # config test properties self.hello=hello world test
|
该属性将会被在HomeController.java
中读取,并作为返回参数,对打包结果进行测试:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
@RestController
public class HomeController { private final static Logger LOG = LoggerFactory.getLogger(HomeController.class); @Value("${self.hello}") private String hello; @GetMapping(value = "/") public String home() { LOG.info("hi, {}.", hello); return hello; } }
|
pom
中定义Profile 参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
<profiles> <profile>
<id>testid>
<properties>
<activatedProperties>testactivatedProperties>
properties>
<activation>
<activeByDefault>trueactiveByDefault>
activation>
profile>
<profile>
<id>prodid>
<properties>
<activatedProperties>prodactivatedProperties>
properties>
profile>
<profile>
<id>releaseid>
<properties>
<activatedProperties>releaseactivatedProperties>
properties>
profile>
profiles>
|
本实例中我们在pom.xml
定义了test
、prod
和release
三个Profile, test
为默认**。
覆盖默认Resource
插件配置
通过maven
resource
插件实现对不同Profile
下的文件的拷贝:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
<resources>
<resource>
<directory>${basedir}/src/main/resources/${activatedProperties}-confdirectory>
resource>
<resource>
<directory>${basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
<includes>
<include>**/application.ymlinclude>
<include>**/application.yamlinclude>
<include>**/application.propertiesinclude>
includes>
resource>
<resource>
<directory>${basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
<includes>
<include>**/application-${activatedProperties}.ymlinclude>
<include>**/application-${activatedProperties}.yamlinclude>
<include>**/application-${activatedProperties}.propertiesinclude>
includes>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<filtering>truefiltering>
<excludes>
<exclude>**/*.propertiesexclude>
excludes>
resource>
resources>
|
Filter
的使用
使用Filter
替换掉通配符:
1 2 3 4
|
<filters> <filter>src/main/resources/application-${activatedProperties}.propertiesfilter>
<filter>${basedir}/src/main/resources/${activatedProperties}-conf/jdbc.propertiesfilter>
filters>
|
采用Maven
**Spring Profile
在上文中我们为Maven 定义了三种不同的activatedProperties
,在application.properties
中如下配置:
1 2
|
# use maven profile properties to config spring boot profile
[email protected]@
|
打包部署
运行Maven
指令打包
1
|
mvn clean package -Dmaven.test.skip=true -P${activatedProperties}
|
此处指定Profile
为release
:
1
|
mvn package -Dmaven.test.skip=true -Prelease
|
结果查看
源代码
本工程源代码可以从github
获取。源代码
总结
本文详细地介绍了Maven
Profile
与Spring
Boot Profile
进行集成的步骤。同时,对集成的原理进行了深入的介绍,包括Spring
Boot
各个插件的默认配置等信息。相信通过阅读本文,并结合源代码,读者一定可以对其熟练的掌握。希望本文可以对读者在工程构件上有所裨益。
好书推荐
-
《Maven实战》
京东
-
《Java编程思想(第4版)》
京东
-
《Java核心技术
卷I:基础知识(原书第10版)》京东
-
《Spring实战(第4版)》京东
-
《Spring
Boot实战》京东
参考
-
Spring
Boot Maven Plugin
-
Spring
Boot Doc Maven Plugin
-
How
to set spring boot active profiles with maven profiles
-
maven
profile
-
使用
Maven Profile 和 Filtering
本文章采用知识共享署名
2.5 ***许可协议进行许可。
欢迎转载,但转载请注明来自张兆玉,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文链接:tramp.cincout.cn/2017/07/04/tool-2017-07-05-integrate-maven-profile-with-spring-boot-profile/
原文链接:http://tramp.cincout.cn/2017/07/04/tool-2017-07-05-integrate-maven-profile-with-spring-boot-profile/