[Spring Boot 系列] 集成maven和Spring boot的profile功能
由于项目的需要, 今天给spirng boot项目添加了profile功能。再网上搜索了一圈,也没有找到满意的参考资料,其实配置并不难,就是没有一个one stop(一站式)讲解的地方,所以有了写这篇博客的想法。由于本人水平有限,文中任何错误和纰漏欢迎大家反馈。希望本文可以给你带来帮助。
本文实现的目标:
1 使用了maven的profile功能
2 使用了Spring Boot的profile功能
3 集成了1和2的功能
4 在eclipse中运行mvn工程,使用开发环境的profile。
5 通过mvn在命令行中打包时,可以指定相应的profile。
什么是profile,解决什么问题呢?举个例子。一般在开发项目的时候要有多个环境,如开发环境、测试环境、生产环境,他们的配置文件一般不同。当我们要向各个环境发布程序时,需要人工处理这些配置文件,这显然麻烦且易错。有了profile,一切问题就简单了。只要在maven打包时使用下面命令即可。
- mvn clean package -Dmaven.test.skip=true -P prod
解释一下, -P prod 就是告诉maven要使用名字为prod的profile来打包,即所有的配置文件都使用生产环境(prod是自己定义的,在这里自定义为生产环境)。
实现思路简述:
maven支持profile功能,当使用maven profile打包时,可以打包指定目录和指定文件,且可以修改文件中的变量。spring boot也支持profile功能,只要在application.properties文件中指定spring.profiles.active=xxx 即可,其中xxx是一个变量,当maven打包时,修改这个变量即可。
具体实现:
A段,介绍coolpro工程的配置。
这个工程只需要修改pom.xml文件即可,需要定义具体maven的profile。定义完毕之后,当我们使用mvn clean package -P dev 时,maven就知道了profileActive=dev这个属性生效了。其中profileActive可以自己定义,就是一个maven的自定义属性。
pom.xml文件如下:
B段,介绍coolpro-api工程的配置
这个工程是一个web工程,主要是想根据指定的profile配置相应的spring boot运行环境。如:如果profile是dev,配置web服务器的监听端口为8010;profile为test,则端口为8020;profile为prod,则端口为8030。
工程中有4个文件:
application.properties, 包含通用配置的文件。文件中有spring.profiles.active=@profileActive@的属性。spring boot的profile是通过spring.profiles.active属性来配置的,这里的profileActive和上面coolpro工程中配置的profileActive属性名要一致。这样,在运行mvn命令时,maven就会帮我们将@profileActive@替换成指定的profile。
application-dev.properties, 当mvn -P dev时, 需要打包这个文件。
application-test.properties, 当mvn -P test时, 需要打包这个文件。
application-prod.properties, 当mvn -P prod时, 需要打包这个文件。
pom.xml配置:
application.properties文件:
其他3个文件见截图:
C段,介绍coolpro-core工程的配置
配置完成了。看效果。
1 在Eclipse环境中,直接运行项目。
2 使用maven命令,打包这个应用。
1)以开发环境打包:mvn clean package -Dmaven.test.skip=true -P dev -e
结果如下:
查看api工程:
查看core工程:
以此类推, 可以运行
mvn clean package -Dmaven.test.skip=true -P test -e
mvn clean package -Dmaven.test.skip=true -P prod -e
注意两点:
1 在属性文件中替换变量时,使用@符合。
最开始,使用$符号,就是不能替换,在网上搜索一下,原来是maven的maven-resources-plugin可以定义这个替换的符号。通过eclipse提供的Maven Pom editor编辑器打开pom.xml文件,在“Effective POM”选项卡中,可以看到定义的是@这个符号。
2 怎么在启动spring boot应用时,打印正在使用的profile,避免配置错误呢?可以参考如下代码。
- public static void main(String[] args) {
- ApplicationContext ctx = SpringApplication.run(RestApiApplication.class, args);
- String[] activeProfiles = ctx.getEnvironment().getActiveProfiles();
- for (String profile : activeProfiles) {
- logger.warn("Spring Boot 使用profile为:{}" , profile);
- }
- }
参考:http://docs.spring.io/spring-boot/docs/current/reference/html/
http://www.tuicool.com/articles/NjqAF3
http://blog.csdn.net/jbgtwang/article/details/8642979
http://zilongsky-gmail-com.iteye.com/blog/2032001
http://www.huangyunkun.com/2015/01/01/run-code-after-spring-boot-started/
http://blog.csdn.net/lihe2008125/article/details/50443491
[Spring Boot 系列] 集成maven和Spring boot的profile功能的更多相关文章
- [Spring Boot 系列] 集成maven和Spring boot的profile 专题
maven中配置profile节点: <project> .... <profiles> <profile> <!-- 生产环境 --> <id& ...
- Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...
- spring boot系列(五)spring boot 配置spring data jpa (查询方法)
接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...
- 集成maven和Spring boot的profile 专题
maven中配置profile节点: <project> .... <profiles> <profile> <!-- 生产环境 --> <id& ...
- 集成maven和Spring boot的profile
如果在配置中勾选了多套配置,则以pom.xml文件中 profiles中 配置 最后一个配置为准. maven中配置profile节点: <project> .... <profi ...
- 集成maven和Spring boot的profile功能
思路:maven支持profile功能,当使用maven profile打包时,可以打包指定目录和指定文件,且可以修改文件中的变量.spring boot也支持profile功能,只要在applica ...
- spring boot系列01--快速构建spring boot项目
最近的项目用spring boot 框架 借此学习了一下 这里做一下总结记录 非常便利的一个框架 它的优缺点我就不在这背书了 想了解的可以自行度娘谷歌 说一下要写什么吧 其实还真不是很清楚,只是想记录 ...
- Spring Boot系列(一) Spring Boot介绍和基础POM文件
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...
随机推荐
- background-clip
background-clip 用来将背景图片做适当的裁剪以适应实际需要. 语法: background-clip : border-box | padding-box | content-box | ...
- CPU大小端判断
两种方式:1.通过指针 2.通过联合体,联合体里面的数据都是按顺序存储的,而且不论联合体里面有多少数据类型,联合体长度是最长的数据类型的长度.不论初始化多少联合体里面的数据,有效的是最 ...
- MVC5 + EF6 入门完整教程 (1)
第0课 从0开始 ASP.NET MVC开发模式和传统的WebForm开发模式相比,增加了很多"约定". 直接讲这些 "约定" 会让人困惑,而且东西太多容易忘记 ...
- 解决a different object with the same identifier value was already associated with the session错误
[转]解决a different object with the same identifier value was already associated with the session错误 这个错 ...
- Jenkins-测试自动化环境搭建(Python+RobotFramework+selenium)
下载插件: Python:https://wiki.jenkins-ci.org/display/JENKINS/Python+Plugin RobotFramework:https://wiki.j ...
- 读《我是一只IT小小鸟》有感
时间太瘦,指缝太宽.一晃一学期过去了,有些迷茫,但也相信未来是美好的.当我看完<我是一只IT小小鸟>这本书之后,心中更是感慨万千.每一个励志的故事都值得欣赏.深思,甚至我还幻想 ...
- 链路层三种类型的MAC地址
若需要转载,请注明出处. 我们知道,链路层都是以MAC地址来进行通信双方的地址标识的,如下图:在应用中根据接收方的多寡来进行划分,可分为以下三种: 单播(Unicast) 多播(Multicast) ...
- Noip2008双栈排序
[问题描述] 用两个栈使一个1...n的排列变得有序.一共有四个操作: A.stack1.push() 读入一个放入栈一 B.stack1.pop() 弹出栈一放入输出序列 C.stack2.push ...
- 【BZOJ】【2301】problem b
莫比乌斯反演/容斥原理 Orz PoPoQQQ PoPoQQQ莫比乌斯函数讲义第一题. for(i=1;i<=n;i=last+1){ last=min(n/(n/i),m/(m/i)); …… ...
- quickeys 过期解决办法
自己在系统中找了大半天,终于发现了一个叫.com.quickeys.quickeysX3.plist的文件,存在于硬盘的 ~/Library/Preferences/ 目录下,直觉感觉文件的大体内容应 ...