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
工程结构
演示实例的默认工程结构为:
Spring
Boot Maven Profile 集成项目结构
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:
|
|
结果查看
-
打包后的
jar中的application.properties打包后的`jar` 中的`application.properties`
-
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/