使用maven的profile功能,我们可以实现多环境配置文件的动态切换,可参考我的上一篇博客。但随着SpringBoot项目越来越火,越来越多人喜欢用SpringBoot的profile功能。但是用SpringBoot的profile功能时,一般我们默认激活的profile肯定是开发环境的profile。当我们打成jar包后,如果在生产环境下运行,就需要在运行这个jar包的命令后面加个命令行参数来指定切换的profile。虽然这样很方便,但是容易忘记加这个参数。
    我们可以通过maven的profile功能和SpringBoot的profile功能结合使用。效果为:当maven打包时通过profile指定配置为test环境的配置,那么我们SpringBoot里面默认激活的就是test环境的配置。  这样我们只需要打包时指定profile后,直接运行jar就可以,不需要在命令行加参数了。这个效果就和我们普通web项目使用maven的profile的效果类似了。

一、思路

    (1)通过maven的profile功能,在打包的时候,通过-P指定maven激活某个pofile,这个profile里面配置了一个参数activatedProperties,不同的profile里面的这个参数的值不同
    (2)SpringBoot的application.properties文件里面spring.profiles.active填的值取上面maven的activatedProperties参数值。
  这样能实现的效果为:
  1. 示例一:
  2. maven打包命令为 mvn clean package -P test
  3. 那么application.properties里面的spring.profiles.active值就是maven idtestprofileactivatedProperties参数值
  4. 示例二:
  5. maven打包命令为 mvn clean package -P product
  6. 那么application.properties里面的spring.profiles.active值就是maven idproductprofileactivatedProperties参数值
 
1
  1. 示例一:
2
  1.   maven打包命令为   mvn clean package -P test    
3
  1.   那么application.properties里面的spring.profiles.active值就是maven idtestprofileactivatedProperties参数值
4
  1. 示例二:
5
  1.   maven打包命令为   mvn clean package -P product
6
  1.   那么application.properties里面的spring.profiles.active值就是maven idproductprofileactivatedProperties参数值

二、案例

(1)项目结构介绍
    项目结构如下图所示,是个常见的SpringBoot项目结构,不同环境的propertis文件的后缀不同(见图中红框处)
(2)pom文件中配置maven的profile
    maven的profile的配置见下面代码
    注意:maven的profile中activatedProperties参数值需要和SpringBoot的不同环境Properties文件的后缀一样。
    比如开发环境的Properties的文件名为application-develop.properties,那么maven中develop的profile里面的activatedProperties参数值就应该是develop
  1. <profiles>
  2. <profile>
  3. <!-- 开发 -->
  4. <id>develop</id>
  5. <activation>
  6. <activeByDefault>true</activeByDefault>
  7. </activation>
  8. <properties>
  9. <activatedProperties>develop</activatedProperties>
  10. </properties>
  11. </profile>
  12. <profile>
  13. <!-- 测试 -->
  14. <id>fuy</id>
  15. <properties>
  16. <activatedProperties>fuy</activatedProperties>
  17. </properties>
  18. </profile>
  19. <profile>
  20. <!-- 生产 -->
  21. <id>production</id>
  22. <properties>
  23. <activatedProperties>production</activatedProperties>
  24. </properties>
  25. </profile>
  26. </profiles>
  1. x
 
1
  1.    <profiles>
2
  1.        <profile>
3
  1.       <!-- 开发 -->
4
  1.            <id>develop</id>
5
  1.            <activation>
6
  1.                <activeByDefault>true</activeByDefault>
7
  1.            </activation>
8
  1.            <properties>
9
  1.                <activatedProperties>develop</activatedProperties>
10
  1.            </properties>
11
  1.        </profile>
12
  1.        <profile>
13
  1.       <!-- 测试 -->
14
  1.            <id>fuy</id>
15
  1.            <properties>
16
  1.                <activatedProperties>fuy</activatedProperties>
17
  1.            </properties>
18
  1.        </profile>
19
  1.        <profile>
20
  1.       <!-- 生产 -->
21
  1.            <id>production</id>
22
  1.            <properties>
23
  1.                <activatedProperties>production</activatedProperties>
24
  1.            </properties>
25
  1.        </profile>
26
  1.    </profiles>
(3)application.properties中的配置
    在application.properties文件中配置SpringBoot默认激活的propertis文件。这时候spring.profiles.active取上面maven的profile里面配置的activatedProperties的值,这个取值要用@符号来取。具体见下面代码
  1. spring.profiles.active=@activatedProperties@
 
1
  1. spring.profiles.active=@activatedProperties@
(4)如何打包
    打包时用 mvn clean package -P profile的id
        如果不加-P参数,那么默认就是<activeByDefault>true</activeByDefault>所在的profile
(5)效果图
        当我们打包命令为mvn clean package -P production 时,解压后的jar包中application.properties配置文件中spring.profiles.active的值自动变成了production
        

三、小结

(1)该方式优点:打包后不需要通过命令行参数来切换不同环境的配置文件,把指定环境的这一步放到了maven打包的命令上
(2)该方式其实是利用了maven的profile功能和SpringBoot的profile相结合使用

四、参考链接


    

Maven的porfile与SpringBoot的profile结合使用详解的更多相关文章

  1. profile的使用详解

    前言 在开发过程中,我们的项目会存在不同的运行环境,比如开发环境.测试环境.生产环境,而我们的项目在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置, ...

  2. maven之(六)setting.xml的配置文件详解

    setting.xml配置文件 maven的配置文件settings.xml存在于两个地方: 1.安装的地方:${M2_HOME}/conf/settings.xml 2.用户的目录:${user.h ...

  3. Maven使用笔记(四)pom.xml配置详解

    pom.xml文件配置详解 --声明规范 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  4. SpringBoot第二篇:配置文件详解一

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10837594.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言   Sprin ...

  5. IntelliJ IDEA 2017版 spring-boot加载jsp配置详解(详细图文实例)

    一.创建项目 (File--->New-->Project) 2.项目配置内容 3.选择配置项目的Group包名,Artifact项目名称 4.选择项目类型为web类型 5.创建成功,点击 ...

  6. SpringBoot与Mybatis整合实例详解

    介绍 从Spring Boot项目名称中的Boot可以看出来,SpringBoot的作用在于创建和启动新的基于Spring框架的项目,它的目的是帮助开发人员很容易的创建出独立运行的产品和产品级别的基于 ...

  7. SpringBoot入门及YML文件详解

    SpringBoot 简介 微框架,与 Spring4 一起诞生,基于约定.生来为了简化 spring 的配置 优点 可以快速的上手,整合了一些子项目(开源框架或者第三方开源库) 可以依赖很少的配置快 ...

  8. springboot(四):thymeleaf使用详解

    在上篇文章springboot(二):web综合开发中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymeleaf 是新一代的模板引擎,在spring4. ...

  9. SpringBoot (四) :thymeleaf 使用详解

    原文出处: 纯洁的微笑 在上篇文章< springboot(二):web综合开发 >中简单介绍了一下thymeleaf,这篇文章将更加全面详细的介绍thymeleaf的使用.thymele ...

随机推荐

  1. Implemented Energy-Conserving Hair Scattering Model from Weta Digital

    I used to implement the Energy-Conserving Hair Scattering Model as the pre-calculation program, so t ...

  2. C++基础概述

    阅读Android源码需要对C++基础语法有一定的认识,借此对C++做一个简单的语法认知. 1.数据类型 类型 关键字 布尔型 bool 字符型 char 整型 int 浮点型 float 双浮点型 ...

  3. C#:关于C#4中IEnumerable<out T>的理解

    IEnumerable<out T>这个接口非常常见,它是最基础的泛型集合接口,表示可迭代的项的序列. 但是奇怪的是为什么泛型参数要带一个“out”? 经过一番资料查阅后,发现此“out” ...

  4. 生产者、消费者模型---Queue类

    Queue队列在几乎每种编程语言都会有,python的列表隐藏的一个特点就是一个后进先出(LIFO)队列.而本文所讨论的Queue是python标准库queue中的一个类.它的原理与列表相似,但是先进 ...

  5. git上传中的排除的配置文件, git实际的操作代码;

    git上传中的排除的配置文件: git实际的操作 在主目录建立.gitignore文件并输入以下保存: *.class #package file *.war *.ear #kdiff3 ignore ...

  6. html之CSS样式学习笔记

    本文内容: 字体样式 文本样式 背景样式 尺寸样式 盒子模型 边框样式 边距样式 浮动布局 定位布局 [CSS3]伸缩布局 标签显示方式 列表样式 [CSS3]过渡样式 [CSS3]变换样式之2D变形 ...

  7. ros中自定义消息 报错 ImportError: No module named em

    大家好,欢迎来到我的博客,之前写的都是比较松散的,鉴于工作的原因,之后的随笔将持续更新ROS以及linux使用方面的随笔,欢迎大家留言,相互学习 ——————————————————————————— ...

  8. logstash配置

    input { #You must define a [type], otherwise you cannot get a field to cut. tcp { port => 5045 ty ...

  9. SMB协议原理抓包分析

    SMB协议原理抓包分析 目录: 1.SMB概述 2.SMB原理 3.SMB配置 一.SMB概述 SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件.打印机. ...

  10. 制作U盘启动-----计算机经验

    这期呢我就先不打算写关于C的文章,这次就先给大家写几篇关于电脑系统安装的计算机经验篇.希望各位接下来看了我几期的经验文章,你们也能在电脑系统报销之时能够让其满血复活. 制作U盘启动 下载制作U盘启动的 ...