maven分环境打包方案
来源:互联网 发布:crf算法详解 编辑:程序博客网 时间:2024/05/01 10:01
前言
目前大多数互联网公司内部将开发环境分为 日常、预发布与线上三套环境,不同环境之间的服务配置项需要做到隔离。例如,数据库连接配置,Zookeeper地址、其他系统url 等等。
本文着重介绍的就是如何通过 Maven 来管理不同环境的配置文件,通过profile来实现分环境打包。
正文
以web开发为例,大部分web开发项目整体结构如下图:
本文以数据库为例进行讲解,spring-dao.xml如下:
<bean id="parentDataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close" abstract="true" init-method="init" > <!-- 初始化连接大小 --> <property name="initialSize" value="2" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="10" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="5" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="30000" /> <!-- <property name="poolPreparedStatements" value="true" /> --> <!-- <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> --> <property name="validationQuery" value="SELECT 1" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <!-- <property name="filters" value="stat" /> --> <property name="filters" value="mergeStat" /> </bean> <!-- 配置数据源--> <bean id="masterDataSource" parent="parentDataSource"> <property name="url" value="#{jdbc['master.jdbc.url']}" /> <property name="username" value="#{jdbc['master.jdbc.username']}" /> <property name="password" value="#{jdbc['master.jdbc.password']}" /> <property name="driverClassName" value="#{jdbc['master.jdbc.driver']}" /> <property name="maxActive" value="15" /> </bean> <bean id="slave1DataSource" parent="parentDataSource"> <property name="url" value="#{jdbc['slave1.jdbc.url']}" /> <property name="username" value="#{jdbc['slave1.jdbc.username']}" /> <property name="password" value="#{jdbc['slave1.jdbc.password']}" /> <property name="driverClassName" value="#{jdbc['slave1.jdbc.driver']}" /> </bean>
applicationContext.xml如下:
<context:annotation-config/> <context:component-scan base-package="com.bytebeats" /> <!-- 引入配置文件 --> <util:properties id="jdbc" location="classpath:jdbc.properties"/> <import resource="spring-mvc.xml"/> <import resource="spring-dao.xml"/>
因为需要部署到3套环境中去,我们需要有3份数据库配置文件,测试环境配置 resources/jdbc.properties 如下:
master.jdbc.driver=com.mysql.jdbc.Drivermaster.jdbc.url=jdbc:mysql://192.168.1.1:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullmaster.jdbc.username=rootmaster.jdbc.password=rootslave1.jdbc.driver=com.mysql.jdbc.Driverslave1.jdbc.url=jdbc:mysql://192.168.1.100:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullslave1.jdbc.username=rootslave1.jdbc.password=root
预发布环境 resources.pre/jdbc.properties 如下:
master.jdbc.driver=com.mysql.jdbc.Drivermaster.jdbc.url=jdbc:mysql://10.130.1.1:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullmaster.jdbc.username=rootmaster.jdbc.password=rootslave1.jdbc.driver=com.mysql.jdbc.Driverslave1.jdbc.url=jdbc:mysql://10.130.1.100:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullslave1.jdbc.username=rootslave1.jdbc.password=root
线上环境 resources.prod/jdbc.properties 如下:
master.jdbc.driver=com.mysql.jdbc.Drivermaster.jdbc.url=jdbc:mysql://211.85.1.1:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullmaster.jdbc.username=rootmaster.jdbc.password=rootslave1.jdbc.driver=com.mysql.jdbc.Driverslave1.jdbc.url=jdbc:mysql://211.85.1.100:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNullslave1.jdbc.username=rootslave1.jdbc.password=root
最关键的地方来了,针对多个不同的环境定义多个profile,以本文为例分别定义test、pre、prod,pom.xml配置如下:
<profiles> <!--日常开发环境--> <profile> <id>test</id> </profile> <!--预发布环境--> <profile> <id>pre</id> <properties> <package.environment>.pre</package.environment> </properties> </profile> <!--线上环境--> <profile> <id>prod</id> <properties> <package.environment>.prod</package.environment> </properties> </profile> </profiles>
打包
以IDEA为例,如下图:
例如,当需要打生产环境war包时,只需选中 prod 这个profile 然后点击 package即可,最后在
当然也可以使用maven窗口命令行来执行package:
mvn package –P prod
上述样例代码均已上传至Github,点此下载。
参考资料
Maven实战(九)——打包的技巧:http://www.infoq.com/cn/news/2011/06/xxb-maven-9-package
0 0
- maven分环境打包方案
- maven 不同环境打包方案
- maven 不同环境打包方案
- Maven适配多种运行环境的打包方案
- maven分环境部署
- maven不同环境打包
- maven 多环境打包
- maven多环境打包
- Maven系列(八)assembly打包-程序和依赖jar包分开化+多环境
- Maven ProfileFilter 分环境运行
- Maven-多环境打包配置
- maven+myeslipse 多环境打包
- maven多环境打包配置
- Maven Profile多环境打包
- maven根据不同环境打包
- Android分渠道多应用名打包方案
- maven分项目模块开发环境调试
- Maven分模块项目环境搭建
- 信号量相关函数整理
- Objective-C 类别小结
- 从零开始学C++之运算符重载(二):++运算符重载、!运算符重载、赋值运算符重载
- ubuntu16.04下安装ibus拼音
- 砖垛之button
- maven分环境打包方案
- Oracle表空间
- patch学习
- 进程间通信编程(2) - 无名管道
- vector清除操作
- DLL编写中extern “C”和__stdcall的作用
- Uva 514 Rails(简单栈)
- 遍历Map的四种方法
- Ubuntu 上安装 Node.js