Spring Boot Profile 与Maven Profile 集成实践
摘要
在现代的项目开发中多人协作、多环境部署已经是必不可少的软件开发方式,笔者目前正在开发的一个基于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
,查看该文件会得到如下内容:
|
|
${resource.delimiter}
的值在该文件的开始位置已经将默认的$
修改为@
,定义如下:
|
|
Spring Boot Profile
Spring Maven 默认配置
同理,在spring-boot-starter-parent
文件中,Spring Boot
对Resource 进行了配置,包括需要被打包进jar&war
的application*
文件:
|
|
从配置文件中可以看到Spring Boot
对配置文件的默认打包设定。
集成
本次实现Spring Boot Profile
与Maven Profile
的集成主要有如下目的:
- 实现不同环境下(profile)将不同目录下的
jdbc.properties
文件打包到classpath
下 - 采用
jdbc.properties
文件中配置的数据库连接信息替换application.properties
文件中的通配符@*@
- 实现根据选中的
Maven Profile
激活Spring Boot Profile
的属性spring.profiles.active
工程结构
演示实例的默认工程结构为:
jdbc.properties
|
|
application.properties
application.properties
文件中需要被替换通配符的数据库连接信息:
|
|
application-${profile}.properties
每一个application-${profile}.properties
文件中都定义了一个属性:
|
|
该属性将会被在HomeController.java
中读取,并作为返回参数,对打包结果进行测试:
|
|
pom 中定义Profile 参数
|
|
本实例中我们在pom.xml
定义了test
、prod
和release
三个Profile, test
为默认激活。
覆盖默认Resource 插件配置
通过maven resource
插件实现对不同Profile
下的文件的拷贝:
|
|
Filter 的使用
使用Filter
替换掉通配符:
|
|
采用Maven 激活Spring Profile
在上文中我们为Maven 定义了三种不同的activatedProperties
,在application.properties
中如下配置:
|
|
打包部署
运行Maven 指令打包
|
|
此处指定Profile
为release
:
|
|
结果查看
-
Java 代码查看
12345678910public class BootMvnProfilesApplication {private final static Logger LOG = LoggerFactory.getLogger(BootMvnProfilesApplication.class);public static void main(String[] args) {ConfigurableApplicationContext applicationContext =SpringApplication.run(BootMvnProfilesApplication.class, args);String[] profiles = applicationContext.getEnvironment().getActiveProfiles();LOG.info( "active profiles are {}.", Arrays.toString(profiles));}}
源代码
本工程源代码可以从github
获取。源代码
总结
本文详细地介绍了Maven Profile
与Spring Boot Profile
进行集成的步骤。同时,对集成的原理进行了深入的介绍,包括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/