前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven利用Profile构建不同环境的部署包

Maven利用Profile构建不同环境的部署包

作者头像
lyb-geek
发布2018-07-26 10:15:21
1.3K0
发布2018-07-26 10:15:21
举报

背景介绍,问题所在

一个项目里总会有很多配置文件,有配置文件是好事,说明项目灵活,但是有的配置文件需要区分不同的环境,即不同的环境,配置文件里的值会有区别,我们需要根据环境的变化来修改配置文件中的值,这样就很不爽了。

我们就遇到了这种情况,公司现在就有四套环境,本机环境(开发人员本机环境)、开发环境(开发阶段,小组内自测用)、测试环境(测试团队用)、生产环境(项目正式上线后的环境)。

在这些不同的环境下有些配置文件的值就会不一样。比如数据库连接配置、远程调用配置、shiro-cas配置、日志路径配置等等这些都是很常见的。所以在构建之前,要根据环境的不同来手动修改配置文件相应的值,然后提交svn,在通过Jenkins构建部署到不同的环境下。这大大增加了开发者的工作量,而且稍不注意就会出错,搞的大家怨声载道。

经过研究发现Maven中的profile可以帮助咱们解决这些问题。

项目为例,如何解决

下面以我们的项目为例,来看看Maven是如何解决这个问题的

① 为每个环境添加配置文件

目录结构如下:

将那些会根据环境不同而变化的配置值填写到对应的配置文件中,比如下面的举例。

本地环境 local.properties:

#shiro-cas配置
loginUrl=http://192.168.22.246:8888/cas/login?service=http://localhost:8091/itoo-basic-editTrainingprogram-web/shiro-cas
casServerUrlPrefix=http://192.168.22.246:8888/cas
casService=http://localhost:8091/itoo-basic-editTrainingprogram-web/shiro-cas
#日志路径
logPath=d:/
#Redis IP 端口
redisIp=192.168.22.246
redisPort=6379

开发环境 dev.properties:

#shiro-cas配置
loginUrl=http://192.168.22.246:8888/cas/login?service=http://192.168.22.247:8091/itoo-basic-editTrainingprogram-web/shiro-cas
casServerUrlPrefix=http://192.168.22.246:8888/cas
casService=http://192.168.22.247:8091/itoo-basic-editTrainingprogram-web/shiro-cas
#日志路径
logPath=/usr/itoo-basic-log/
#Redis IP 端口
redisIp=192.168.22.246
redisPort=6379

测试环境 test.properties:

#shiro-cas配置
loginUrl=http://192.168.22.210:8888/cas/login?service=http://192.168.22.211:8091/itoo-basic-edittrainingprogram-web/shiro-cas
casServerUrlPrefix=http://192.168.22.210:8888/cas
casService=http://192.168.22.211:8091/itoo-basic-edittrainingprogram-web/shiro-cas
#日志路径
logPath=/usr/itoo-basic-log/
#Redis IP 端口
redisIp=192.168.22.210

redisPort=6379

PS:日志路径问题,本机开发为windows环境,路径为D:\xxx;开发环境,测试环境等都是Linux环境,路径为/usr/xxx/xx。格式不一样要做区分。

② 修改项目原有的配置文件

比如shiro-cas.properties、log4j.xml、redisHost.properties,将原来写的死值,也就是每次需要修改的地方,替换成变量:${xxx}

shiro-cas.properties

loginUrl=${loginUrl}
casServerUrlPrefix=${casServerUrlPrefix}
casService=${casService}

log4j.xml

<appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="${logPath}editTrainingprogram-default.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <param name="Append" value="false" />
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%X{usreId}] %-5p %c{2} - %m%n" />
        </layout>
    </appender>

redisHost.properties

host=${host}
port=${port}

③ 修改项目的pom.xml 文件

添加下面文件(直接复制即可,不区分系统和模块)

<profiles>
                <profile>
                        <!-- 本地环境 -->
                        <id>local</id>
                        <build>
                                <filters>
                                        <filter>src/main/resources/filters/local.properties</filter>
                                </filters>
                        </build>
                        <!-- 默认激活本环境 -->
                        <activation>
                                <activeByDefault>true</activeByDefault>
                        </activation>
                </profile>
                <profile>
                        <!-- 开发环境 -->
                        <id>dev</id>
                        <build>
                                <filters>
                                        <filter>src/main/resources/filters/dev.properties</filter>
                                </filters>
                        </build>
                </profile>
                <profile>
                        <!-- 生产环境 -->
                        <id>prod</id>
                        <build>
                                <filters>
                                        <filter>src/main/resources/filters/prod.properties</filter>
                                </filters>
                        </build>
                </profile>
                <profile>
                        <!-- 测试环境 -->
        <id>test</id>
                        <build>
                                <filters>
                                        <filter>src/main/resources/filters/test.properties</filter>
                                </filters>
                        </build>
                </profile>
        </profiles>

        <build>
                <!-- 指定需要编译的目录 -->
                <resources>
                        <resource>
                                <directory>src/main/resources</directory>
                                <!--可以在此配置过滤文件  -->
                                <includes>
                                        <include>**/*.xsd</include>
                                        <include>**/*.properties</include>
                                        <include>**/*.xml</include>
                                </includes>
                                <!--开启filtering功能  -->
                                <filtering>true</filtering>
                        </resource>
                </resources>
        </build>

上面的配置:

1. 通过不同的profile指定不同环境的id和对应的配置文件。

2. 通过resources 指定要编译的目录,过滤哪些配置文件,项目中实际用到的配置文件。意思是对src/main/resources目录下的配置文件进行占位符替换。

④ 通过maven编译打包,测试效果

在对应的pom.xml文件,右键Run as –> Maven Build->输入install –Pxxx,xxx指定是哪个环境id,也就是咱们在pom.xml中配置的profile的Id。

假如不指定 -P 参数的话,则会使用 activeByDefault=true 的一项(即 local)。

比如开发环境执行:clean install –Pdev 打包后配置文件:

shiro-cas.properties

loginUrl=http://192.168.22.246:8888/cas/login?service=http://192.168.22.247:8091/itoo-basic-editTrainingprogram-web/shiro-cas
casServerUrlPrefix=http://192.168.22.246:8888/cas
casService=http://192.168.22.247:8091/itoo-basic-editTrainingprogram-web/shiro-cas

log4j.xml

<appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/usr/itoo-basic-log/editTrainingprogram-default.log" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <param name="Append" value="false" />
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%X{usreId}] %-5p %c{2} - %m%n" />
        </layout>
    </appender>

redisHost.properties

host=192.168.22.246
 port=6379

比如生产环境:clean install –Pprod 测试环境执行:clean install –Ptest

如果使用Jenkins集成

因为咱们的每一套环境都由相应的Jenkins来完成持续集成的工作(包含maven Build工作),所以需要修改每个模块的Jenkins配置:如果是开发环境就在deploy后添加-Pdev,生产环境就添加-Pprod,测试就添加-Ptest。

小结

简单来说,Maven多环境打包原理就是,事先建立好各个环境的配置文件,写好对应的值,比如dev.properties、test.properties、prod.properties,然后在项目打包发布的时候,用命令指定使用一个环境的配置文件,用其实际内容来替换项目配置文件中的占位符。

经过这样配置完后,咱们就再也不用受各种环境IP-端口号的煎熬了,是个一劳永逸的办法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linyb极客之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景介绍,问题所在
  • 项目为例,如何解决
  • 如果使用Jenkins集成
  • 小结
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档