Maven多环境配置实战 filter

目前在开发一个wap项目,主要有开发、测试和最终部署上线几个阶段,每个阶段对配置(数据库、日志)都有不同的设置。以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线。但是公司并非都有一个项目,我们也不是只负责一个项目,这样的工作方式导致每每上线时大家都心惊胆颤,实在忍受不了折磨,决定研究下maven下如何解决这个问题。找到方案后,不敢独享,将结果向大家介绍下。思路:
几个环境中主要的不同可以概括为数据库配置和log日志路径配置以及外部依赖的接口配置不一样,但是我们这里简单起见,假设只考虑数据库配置。
这样的话,如果能实现在生成不同的发布包时对资源进行不同的替换就可以达到目的了。经过研究maven,确定了最终方案。最终方案:
首先需要在pom文件中确定filter和要filter的资源,这是通过在build节点中添加filter和resource来实现的,示例如下:

src/main/filters/filter- env.propertiessrc/main/resourcestruesrc/main/resourcesexcludingsrc/main/filters/filter e n v . p r o p e r t i e s s r c / m a i n / r e s o u r c e s t r u e 上 述 配 置 表 示 要 对 s r c / m a i n / r e s o u r c e s 下 的 资 源 进 行 过 滤 , 因 为 该 目 录 下 没 有 二 进 制 文 件 , 所 以 没 有 e x c l u d i n g 。 过 滤 时 采 用 的 过 滤 文 件 为 s r c / m a i n / f i l t e r s / f i l t e r − {env}.properties文件,其中 env使pomprofiledevdevdevtesttestproductproduct线Pprofileidmavenenv使filterresourcesmavenpackagePdevdev使filterdev.propertiesresourcesdb.properties,.jdbc.connection.url= e n v 是 一 个 变 量 , 表 示 当 前 使 用 的 环 境 , 这 是 通 过 在 p o m 文 件 中 通 过 p r o f i l e 定 义 的 , 如 下 所 示 : d e v d e v d e v t e s t t e s t p r o d u c t p r o d u c t 其 中 斜 体 字 部 分 表 示 缺 省 的 变 量 值 , 这 样 在 开 发 时 就 不 用 每 次 指 定 这 个 值 。 在 测 试 和 部 署 上 线 时 分 别 通 过 − P 传 入 当 前 的 p r o f i l e i d , 这 样 m a v e n 就 会 将 e n v 变 量 设 置 为 对 应 的 值 , 从 而 导 致 使 用 不 同 的 f i l t e r 文 件 来 对 r e s o u r c e s 下 的 文 件 进 行 过 滤 替 换 。 例 如 : 当 调 用 m a v e n p a c k a g e 时 传 入 − P d e v ( 因 为 我 们 将 d e v 设 置 为 默 认 , 所 以 也 可 以 不 传 ) 参 数 , 则 会 使 用 f i l t e r − d e v . p r o p e r t i e s 中 的 内 容 来 替 换 r e s o u r c e s 目 录 中 的 配 置 文 件 , 具 体 到 我 们 的 项 目 就 是 d b . p r o p e r t i e s , 内 容 如 下 : … … . j d b c . c o n n e c t i o n . u r l = {xiangmu.jdbc.url}
jdbc.connection.username= xiangmu.jdbc.usernamejdbc.connection.password= x i a n g m u . j d b c . u s e r n a m e j d b c . c o n n e c t i o n . p a s s w o r d = {xiangmu.jdbc.password}
……………
filter-dev.properties文件内容如下:
…………….
xiangmu.jdbc.url=jdbc:mysql://localhost:3306/xiangmu?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
xiangmu.jdbc.username=root
xiangmu.jdbc.password=abcdefg
……………..
这样在编译结束后
db.properties的内容就会变为:
jdbc.connection.url=jdbc:mysql://localhost:3306/xiangmu?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.connection.username=root
jdbc.connection.password=abcdefg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值