• Maven的porfile与SpringBoot的profile结合使用详解


        使用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参数值。
      这样能实现的效果为:
    示例一:
        maven打包命令为   mvn clean package -P test    
        那么application.properties里面的spring.profiles.active值就是maven中 id为test的profile的activatedProperties参数值
    示例二:
        maven打包命令为   mvn clean package -P product
        那么application.properties里面的spring.profiles.active值就是maven中 id为product的profile的activatedProperties参数值
     
    1
    示例一:
    2
        maven打包命令为   mvn clean package -P test    
    3
        那么application.properties里面的spring.profiles.active值就是maven中 id为test的profile的activatedProperties参数值
    4
    示例二:
    5
        maven打包命令为   mvn clean package -P product
    6
        那么application.properties里面的spring.profiles.active值就是maven中 id为product的profile的activatedProperties参数值

    二、案例

    (1)项目结构介绍
        项目结构如下图所示,是个常见的SpringBoot项目结构,不同环境的propertis文件的后缀不同(见图中红框处)
    (2)pom文件中配置maven的profile
        maven的profile的配置见下面代码
        注意:maven的profile中activatedProperties参数值需要和SpringBoot的不同环境Properties文件的后缀一样。
        比如开发环境的Properties的文件名为application-develop.properties,那么maven中develop的profile里面的activatedProperties参数值就应该是develop
        <profiles>
            <profile>
            	<!-- 开发 -->
                <id>develop</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                <properties>
                    <activatedProperties>develop</activatedProperties>
                </properties>
            </profile>
            <profile>
            	<!-- 测试 -->
                <id>fuy</id>
                <properties>
                    <activatedProperties>fuy</activatedProperties>
                </properties>
            </profile>
            <profile>
            	<!-- 生产 -->
                <id>production</id>
                <properties>
                    <activatedProperties>production</activatedProperties>
                </properties>
            </profile>
        </profiles>
    x
     
    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>
    (3)application.properties中的配置
        在application.properties文件中配置SpringBoot默认激活的propertis文件。这时候spring.profiles.active取上面maven的profile里面配置的activatedProperties的值,这个取值要用@符号来取。具体见下面代码
    spring.profiles.active=@activatedProperties@
     
    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相结合使用

    四、参考链接


        
  • 相关阅读:
    my live health
    network / switchboard / jiaohuanji / switch
    my live boadband
    proxyServer Squid 3.5.5 / 20181111
    db mysql / mysql cluster 5.7.19 / performance
    MPTCP v0.92 Release
    MPTCP
    外国专家:区块链是新的Linux 而非新的互联网
    为什么用 Unity 3D 开发游戏是用 C# || JS 开发而不是用C++
    树莓派、 Arduino 、传统单片机开发板该如何选择?
  • 原文地址:https://www.cnblogs.com/zeng1994/p/06917ed3b98677fa7a1b0f74de16c3be.html
Copyright © 2020-2023  润新知