一般的软件项目,在开发、测试及生产等环境下配置文件中参数是不同的。传统的做法是在项目部署的时候,手动修改或者替换这个配置文件。这样太麻烦了,我们可以用Maven的profile来解决这个问题。只要在打包时加个参数就可以实现想打那个环境的配置文件就打包那个环境的配置文件,提高了效率。
        下面介绍下具体的做法

一、多环境配置文件的放置

        将不同环境下的配置文件按照文件夹来划分,但需要保证配置文件的文件名在不同环境下必须一致
      • development:开发环境
      • testing:测试环境
      • production:生产环境
    配置文件分文件夹后的效果如下图
        

二、pom文件的配置

(1)配置profile
        在pom文件中配置不同的profile。profile里面id标签为这个profile的名字,properties标签的内容为这个profile里面的参数。
        我们配置profile的参数为:  profiles.active=对应环境文件夹名字   
        这样在打包资源文件时,通过激活不同的profile来拿取profiles.active的值所对应的文件夹进行打包。
代码如下:
	<profiles>
<profile>
<!-- 开发环境 -->
<id>development</id>
<properties>
<profiles.active>development</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<!-- 测试环境 -->
<id>testing</id>
<properties>
<profiles.active>testing</profiles.active>
</properties>
</profile>
<profile>
<!-- 生产环境 -->
<id>production</id>
<properties>
<profiles.active>production</profiles.active>
</properties>
</profile>
</profiles>
x
 
1
    <profiles>
2
        <profile>
3
            <!-- 开发环境 -->
4
            <id>development</id>
5
            <properties>
6
                <profiles.active>development</profiles.active>
7
            </properties>
8
            <activation>
9
                <activeByDefault>true</activeByDefault>
10
            </activation>
11
        </profile>
12
        <profile>
13
            <!-- 测试环境 -->
14
            <id>testing</id>
15
            <properties>
16
                <profiles.active>testing</profiles.active>
17
            </properties>
18
        </profile>
19
        <profile>
20
            <!-- 生产环境 -->
21
            <id>production</id>
22
            <properties>
23
                <profiles.active>production</profiles.active>
24
            </properties>
25
        </profile>
26
    </profiles>    
        通过<activeByDefault>true</activeByDefault>设置默认激活的profile
(2)配置maven资源文件打包规则
        打包资源文件时,需要通过profile里面的profiles.active的值来切换不同环境的资源文件。具体的配置见下面代码
		<resources>
<resource>
<directory>src/main/resources</directory>
<!-- 这个filter必须要设为true, 把所有文件都过滤掉,然后下面再手动include,一个一个文件夹自己添加 -->
<filtering>true</filtering>
<includes>
<include>spring/*</include>
</includes>
</resource>
<resource>
<!-- 这里会直接把${profiles.active}对应文件夹下的内容打包到classpath下 -->
<directory>src/main/resources/${profiles.active}</directory>
</resource>
</resources>
14
 
1
        <resources>
2
            <resource>
3
                <directory>src/main/resources</directory>
4
                <!-- 这个filter必须要设为true, 把所有文件都过滤掉,然后下面再手动include,一个一个文件夹自己添加 -->
5
                <filtering>true</filtering>
6
                <includes>
7
                    <include>spring/*</include>
8
                </includes>
9
            </resource>
10
            <resource>
11
                <!-- 这里会直接把${profiles.active}对应文件夹下的内容打包到classpath下 -->
12
                <directory>src/main/resources/${profiles.active}</directory>
13
            </resource>
14
        </resources>
        关于maven的resource可以参考这篇文章:https://blog.csdn.net/feicongcong/article/details/78833618
        特别关注下<includes>和<directory>的作用
        这里由于用了<directory>src/main/resources/${profiles.active}</directory>,它是把${profiles.active}对应文件夹下的内容打包到classpath下面了,所以读取${profile.active}文件夹下的propertis文件的路径为 classpath:xxx.properties

三、如何在Spring配置文件中读取这些不同环境下的propertis文件

       其实在上面已经说了,按照我这个配置来读取的话,这些propertis文件都在classpath下面。参考代码如下
	 <bean id="propertyConfig"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:redis-config.properties</value>
<value>classpath:dubbo-client.properties</value>
<value>classpath:rabbitmq-config.properties</value>
</list>
</property>
</bean>
 
1
     <bean id="propertyConfig"  
2
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
3
        <property name="locations">  
4
            <list>
5
                <value>classpath:redis-config.properties</value>
6
                <value>classpath:dubbo-client.properties</value>
7
                <value>classpath:rabbitmq-config.properties</value>
8
            </list> 
9
        </property>  
10
    </bean>

四、如何打包

        mvn package –P 这里填你的profile的id值  
        特别注意:P是大写的

Maven之profile实现多环境配置动态切换的更多相关文章

  1. (十一)Maven之profile实现多环境配置动态切换

    原文链接:https://www.cnblogs.com/zeng1994/p/a442108012ffd6a97b22c63055b48fe9.html 一.多环境配置文件的放置  将不同环境下的配 ...

  2. maven 利用 profile 进行多环境配置

    我们在进行项目的多环境配置时,有很多种方式供我们选择,比如 SpringBoot 自带的 application-dev.yml.maven 的 profile 等.这里介绍的就是如何利用 profi ...

  3. 使用maven的profile构建不同环境配置

    基本概念说明(resources.filter和profile): 1.profiles定义了各个环境的变量id 2.filters中定义了变量配置文件的地址,其中地址中的环境变量就是上面profil ...

  4. SpringBoot Profiles 多环境配置及切换

    目录 前言 默认环境配置 多环境配置 多环境切换 小结 前言 大部分情况下,我们开发的产品应用都会根据不同的目的,支持运行在不同的环境(Profile)下,比如: 开发环境(dev) 测试环境(tes ...

  5. 通过maven profile 打包指定环境配置

    背景 最近换了个新公司接手了一个老项目,然后比较坑的是这个公司的项目都没有没有做多环境打包配置,每次发布一个环境都要手动的去修改配置文件.今天正好有空就来配置下. 解决这个问题的方式有很多,我这里挑选 ...

  6. maven profile实现多环境配置

    每次项目部署上线都需要手动去修改配置文件(比如数据库配置,或者一个自定义的配置)然后才能打包,很麻烦,网上找到 maven profile可以完成这个工作,记录如下: 环境:eclipse + spr ...

  7. 使用maven profile实现多环境配置相关打包

    项目开发需要有多个环境,一般为开发,测试,预发,正式4个环境,通过maven可以实现按不同环境进行打包部署,命令为: mvn package -P dev 在eclipse中可以右击选项run con ...

  8. Spring boot 的profile功能如何实现多环境配置自动切换

    通常服务端应用开发需要经过以下几个流程: 开发 -> 测试 -> RC验证 -> 上线 这就涉及到四个不同的环境,开发环境.测试环境.RC环境以及生产环境,为了避免不同环境之间相互干 ...

  9. spring boot:基于profile的多环境配置(spring boot 2.3.4)

    一,为什么要进行多环境配置? 1,没有人会在生产环境中进行开发和测试, 所以通常会有多个环境的划分: 工程师本地的开发环境 进行测试的测试环境 最终上线的生产环境 每个环境对应不同的数据库/缓存等数据 ...

随机推荐

  1. Android SharedPreferences增,删,查操作

    SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedP ...

  2. Foundry feats. MultiverseStudio

    https://www.foundry.com/news-awards/foundry-jcube-announcement 经过这么多年的过程,本周本产品终于发布了PR,这次是由Foundry独家代 ...

  3. echarts雷达图点击事件 包含(2.x,3.85,4.02)测试

    最近看见别人问的问题,点击雷达图的拐点,获取点击数据的问题,直接上代码. echarts 2x 的点击事件 echarts配置问题:https://www.douban.com/note/509404 ...

  4. MFC Bresesnham算法

    Bresesnham算法绘制直线段 Bresenham算法的意义:高效的将图形光栅化.其计算过程中均采用加法运算,故大大减少了程序的开销. 绘制直线段(MFC中) //传入参数:起点.终点,颜色 vo ...

  5. hdu-2027题&&gets/getchar的区别

    hdu-2027题(水题~~~) 统计每个元音字母在字符串中出现的次数. Input输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串. Output对于每个测试实例输 ...

  6. 自动化测试基础篇--Selenium文件上传send_keys

    摘自https://www.cnblogs.com/sanzangTst/p/8358165.html 文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单. 一般分两个场景:一 ...

  7. Windows Server 2016-Wbadmin命令行备份域控制器

    在上一章我们讲到Windows Server 2016-图形化备份域控制器的方法,本章我们聊聊如何通过命令行Wbadmin对域控制器进行备份.在Windows Server Active Direct ...

  8. mysql建表基本语法

    mysql添加约束的两种条件: ------表的内部添加(约束) 列名1 数据类型 (int) primary key auto_increment,---主键默认不能为空的 列名2 数据类型 not ...

  9. 你可能不知道的printf

    前言 printf可能是我们在学习C语言的过程中最早接触的库函数了.其基本使用想必我们都已经非常清楚了.但是下面的这些情况你是否已经清楚地知道了呢? 示例程序 我们来看一个示例程序,看看你能否对下面的 ...

  10. Spring的jdbc模板2:使用开源的连接池

    上篇简要介绍了如何在spring中配置默认的连接池和jdbc模板,这篇来介绍开源的连接池配置与属性引入 C3P0连接池配置: 引入jar包 配置c3p0连接池 <?xml version=&qu ...