使用maven管理多环境配置信息打包

应用场景

        在开发过程中,对于存储在配置文件如properties、xml文件中的值,有时候是根据不同环境而不同的,例如数据库的地址,用户名和密码,调用其他系统的地址,秘钥,appId等等。笔者了解到,在实际开发过程中,有很多种方式可以实现,像在分布式系统的zookepper、spring cloud中的config组件,携程的apollo,在非分布式或者微服务框架中,在集成了spring中可以使用spring的profile机制,还可以使用maven profile + spring context:property-placeholder的方式。在非spring环境中,通过maven profile + filter的方式同样很简单。笔者这里记录了maven profile + filter的方式,下面使用这种方式演示如何来使用,并通过自定义的方式改变打包后的jar包名称。

实践过程

1. 创建一个maven工程
  在resources下创建config.properties,这个config.proerties就是环境实际使用的config
在这里插入图片描述
接下来在resources下创建config文件夹,并创建dev、test文件夹,并在dev、test文件下分别创建config.properties文件,然后在各自环境下的config.properties文件中配置可变信息的值,添加了这些文件后,resources文件结构如下
在这里插入图片描述
点开dev文件夹下的config.properties
在这里插入图片描述

注意这里的jdbc.url的意思是,后期去替换掉 resources/config.properties中的${jdbc.url},
所以需要确保两边的一致性,不然到时候打包出来resources/config.properties中的${jdbc.url}将不会被替换掉。

同理,点开test文件夹下的config.properties
在这里插入图片描述
好了,resources文件的准备完成,接下来需要在pom.xml文件中配置 profile属性,并接住filter的功能实现诸如${jdbc.url}${xxx}的替换。

2. 在maven的pom.xml配置

           首先在pom.xml中配置profiles,并配置好每个环境对应的profile,此样例中如下

<profiles>
	     <!-- 开发环境,默认使用开发环境 -->
	    <profile>
	        <id>dev</id>
	        <properties>
	            <environment>dev</environment>
	        </properties>
            <!-- 默认生效的环境 -->
	        <activation>
	            <activeByDefault>true</activeByDefault>
	        </activation>
	        <build>
                <filters>
                    <filter>src/main/resources/config/dev/config.properties</filter>
                </filters>
            </build>
	    </profile>
	    <profile>
	        <id>test</id>
	        <properties>
	            <environment>test</environment>
	        </properties>
	        <build>
                <filters>
                    <filter>src/main/resources/config/test/config.properties</filter>
                </filters>
            </build>
	    </profile>
	    <profile>
	        <id>pro</id>
	        <properties>
	            <environment>pro</environment>
	        </properties>
	    </profile>
	</profiles>

在dev中id标签表示该环境(profile)的定位,看到后面就自然懂了,其中

<properties>
   <environment>dev</environment>
</properties>

中的environment是自定义的,也可以换成其它名字,如<env>dev</env>,这样之后,在pom.xml中就可以使用${environment}来表示dev这个值,如果是dev,则为${env},很容易理解。
       这里在每个环境(profile)中都定了了构建时指定用来过滤的文件,例如我们在dev环境中指定dev文件夹下的config.properties,这个的意思就是,在打包的时候如果指定了dev这个环境,则使用dev/config.properties去寻找匹配的${xxx},至于要寻找那些文件,则需要到另外的地方配置,见后面。

<build>
    <filters>
        <filter>src/main/resources/config/dev/config.properties</filter>
    </filters>
</build>

接下来需要配置,resources标签,这个标签,是在pom.xml级的build中加入

<resources>
    <resource>
           <directory>src/main/resources</directory>
           <excludes>
               <exclude>config/**/*</exclude>
           </excludes>
           <filtering>true</filtering>
       </resource>
</resources>

directory表示对这个目录下的文件处理,excludes表示排除掉哪些文件不处理,可以使用通配符,filtering设置为true,既呼应了profile中的filters。
因此,这里的整体意思是,根据打包时使用的不同环境,如(dev),使用dev/config.properties文件,在resource配置的directory目录下寻找符合要求的文件,如果这些文件中存在${xxx},并且已经在dev/config.properties中配置的值,则使用dev/config.properties中对应的值,替换到寻找到的${xxx}。接着往下看。

3.执行打包

好了,准备工作完成,接下来通过mvn打包,笔者喜欢手动敲命令的方式打包,在pom.xml所在的目录下,打开命令行终端(或者git bash),笔者就非常喜欢用 git bash。执行mvn clean后,执行mvn -P dev package,当然也可以跳过测试mvn -P dev package -Dmaven.test.skip=true
在这里插入图片描述
完成之后,打开生成的jar包(使用解压缩软件直接打开,例如WinRaR),可以看到最外层的resources/config.properties
在这里插入图片描述
对比之前的
在这里插入图片描述

发现,${jdbc.url}已经被dev/config.properties 中key为jdbc.url的value替换了。
         实际上,到这来profile中dev的作用已经不需要解释了,关键是mvn提供了-P这个参数,通过指定-P的,就可以在打包的时候指定到相应id的profile配置信息。如果不指定-P的值,则默认为(这里就是dev)

<activation>
    <activeByDefault>true</activeByDefault>
</activation>

再来打test环境的包试试 mvn -P test package
在这里插入图片描述

接下来,在resources中添加一个mybatis-config.xml文件,看下配置
在这里插入图片描述
打包之后
在这里插入图片描述
发现一样可以。

4.打包别名
          好吧,既然已经可以根据不同环境,可以将resources/config.properties可变的值抽离,并在打包的时候,可变部分替换到不同环境的值,那么很容易想到,将打成的包也区别开来,在pom.xml层级的build中设置<finalName>标签的值
在这里插入图片描述
打test包结果
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值