缘起:
目前在开发一个wap项目,主要有开发、测试和最终部署上线几个阶段,每个阶段对配置(数据库、日志)都有不同的设置。以前都是以开发环境为主,在测试和部署上线时由部署工程师负责修改配置并上线。但是公司并非都有一个项目,我们也不是只负责一个项目,这样的工作方式导致每每上线时大家都心惊胆颤,实在忍受不了折磨,决定研究下maven下如何解决这个问题。找到方案后,不敢独享,将结果向大家介绍下。
思路:
几个环境中主要的不同可以概括为数据库配置和log日志路径配置以及外部依赖的接口配置不一样,但是我们这里简单起见,假设只考虑数据库配置。
这样的话,如果能实现在生成不同的发布包时对资源进行不同的替换就可以达到目的了。经过研究maven,确定了最终方案。
最终方案:
首先需要在pom文件中确定filter和要filter的资源,这是通过在build节点中添加filter和resource来实现的,示例如下:
<filters>
<filter>src/main/filters/filter-${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
上述配置表示要对src/main/resources下的资源进行过滤,因为该目录下没有二进制文件,所以没有excluding。过滤时采用的过滤文件为src/main/filters/filter-${env}.properties文件,其中${env}是一个变量,表示当前使用的环境,这是通过在pom文件中通过profile定义的,如下所示:
<properties>
[i]<env>dev</env>[/i]
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
</properties>
</profile>
<profile>
<id>product</id>
<properties>
<env>product</env>
</properties>
</profile>
</profiles>
其中斜体字部分表示缺省的变量值,这样在开发时就不用每次指定这个值。在测试和部署上线时分别通过-P传入当前的profile id,这样maven就会将env变量设置为对应的值,从而导致使用不同的filter文件来对resources下的文件进行过滤替换。
例如:当调用maven package时传入-Pdev(因为我们将dev设置为默认,所以也可以不传)参数,则会使用
filter-dev.properties中的内容来替换resources目录中的配置文件,具体到我们的项目就是db.properties,内容如下:
.......
jdbc.connection.url=${xiangmu.jdbc.url}
jdbc.connection.username=${xiangmu.jdbc.username}
jdbc.connection.password=${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
这样只要在一开始确定了三个环境中的配置,以后的部署就可以很轻松的进行了。
window安装多个maven maven多环境配置
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【IDEA】idea设置默认maven配置, 避免每次设置maven
【IDEA】idea设置默认maven配置, 避免每次设置maven
idea配置maven maven安装配置 -
【Maven】多环境配置与应用
多环境配置与应用
java maven 多环境 环境配置 bc -
maven项目中,多环境配置
最近的一个物流项目需要用到多环境配置:分为开发环境,测试环境,和生产环境,需要在
maven 开发环境 生产环境 -
nuxt3 新项目全局设置rem
[TOC]1、Nuxt目录结构详解Nuxt项目文件目录结构|-- .nuxt // Nuxt自动生成,临时的用于编辑的文件,build |-- assets // 用于组织未编译的静态资源入LESS、SASS 或 JavaScript |-- components
nuxt3 新项目全局设置rem vue java javascript react -
vue3中安装了eslint插件却无效
前端进阶之路漫漫,总要留点儿痕迹项目搭建脚手架3快速搭建安装完node后,安装vue脚手架 1. npm install -g @vue/cli@版本号(如已安装请忽略); 2. 创建项目: vue create <project name>; 3. default(babel,eslint)默认 Manually select features 手动选择;
vue3中安装了eslint插件却无效 vue eslint 配置 vue ts 设置tslint提示 vue 用npm提示编译错误 vue在服务器上也要配置npm吗?