maven分环境打包方案

前言

目前大多数互联网公司内部将开发环境分为 日常、预发布与线上三套环境,不同环境之间的服务配置项需要做到隔离。例如,数据库连接配置,Zookeeper地址、其他系统url 等等。
本文着重介绍的就是如何通过 Maven 来管理不同环境的配置文件,通过profile来实现分环境打包。

正文

以web开发为例,大部分web开发项目整体结构如下图:
这里写图片描述

目录描述
resources存放公共资源文件
resources.pre存放预发布环境配置文件
resources.prod存放线上生产环境配置文件

本文以数据库为例进行讲解,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.Driver
master.jdbc.url=jdbc:mysql://192.168.1.1:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
master.jdbc.username=root
master.jdbc.password=root

slave1.jdbc.driver=com.mysql.jdbc.Driver
slave1.jdbc.url=jdbc:mysql://192.168.1.100:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
slave1.jdbc.username=root
slave1.jdbc.password=root

预发布环境 resources.pre/jdbc.properties 如下:

master.jdbc.driver=com.mysql.jdbc.Driver
master.jdbc.url=jdbc:mysql://10.130.1.1:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
master.jdbc.username=root
master.jdbc.password=root

slave1.jdbc.driver=com.mysql.jdbc.Driver
slave1.jdbc.url=jdbc:mysql://10.130.1.100:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
slave1.jdbc.username=root
slave1.jdbc.password=root

线上环境 resources.prod/jdbc.properties 如下:

master.jdbc.driver=com.mysql.jdbc.Driver
master.jdbc.url=jdbc:mysql://211.85.1.1:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
master.jdbc.username=root
master.jdbc.password=root

slave1.jdbc.driver=com.mysql.jdbc.Driver
slave1.jdbc.url=jdbc:mysql://211.85.1.100:3306/crm?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
slave1.jdbc.username=root
slave1.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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.[今日课程内容总览] Maven--***** 介绍 优点 用maven创建一个项目, 用maven创建一个ssm项目,每一层的代码开,把一个项目拆解成多个项目 2.[今日包含笔记] maven介绍: Eclise: 缺点: Jar包: 版本管理,解决jar包冲突:删除老的jar包,保留新的jar包 不同的项目,jar包要复制一份;Users Library 羡慕yum的好处,安装软件,自动下载,自动验证,自动安装,自动测试;镜像网站 Jar包的依赖: 致命的缺点:现象: 每一个项目都有前台(广大网民)和后台(管理员看的),后台的功能远远的大于>前台的功能;迭代升级;每次升级都要重启tomcat;将tomcat做很多个备份(10个),为了nginx转发;前台:访问比较大,管理员访问量比较小; 问题: 每次升级,10个tomcat都升级一次 后台的升级频繁要比前台频繁;升级10次,9次改的是后台的代码,只有一次是前台的代码 解决方案: 是将前台(广大网民看的页面)的代码和后台(管理员)的代码要开,将原来的一个项目别放到两个web项目;一个web项目一个tomcat;好处:更新的时候如果更新后台(管理员),只需要重启后台的tomcat(服务); 折成两个项目以后的缺点:Service以下的代码重复; 将Service层以下的代码放到一个新创建的java项目中,在部署的时候将Service(java项目)打成一个jar包,别放到两个web服务中;编译的时候让web项目依赖与Service(java项目)_source folder;配置麻烦,项目与项目之间的依赖头脑得相当清晰 这个缺点Maven解决了; 请听今天的内容 拆前:图一 拆后是图二 3. 介绍 官网:http://maven.apache.org/download.cgi 目录介绍: Bin:二进制文件 Boot:引导,启动 Conf:配置文件 Lib:jar包 README.txt:读我 3.1.修改配置文件的内容 路径:%MAVEN_HOME%\conf\settings.xml 配置文件代码: d:/repo alimaven aliyun maven http://maven.aliyun.com/nexus/content/groups/public/ central 注意: 千万不要将文档中的setting的内容全部替换到maven中的内容,要对比着修改,保留原来的; 只修改本地仓库,和下载镜像(源) 3.2.Eclipse Maven的配置 每打开一个新的工作空间,要配置一下Maven,然后再写代码 3.3.创建Maven项目 右击创建一个maven project Packing:有三种: Jar:java项目, War:web项目 Pom:文件夹,jar和war文件,mavenProject:一个项目,可以放jar和war包,通过pom,一般新创建的maven Project是POM 3.4.创建一个Maven Model 最外面的项目是MavenProject,其它的全部是Maven Model 3.4.1.创建JAR 目录介绍: Mvn-jar |-->Src:源码:java代码 |-->|-->main:代码:除测试以外的代码:junit |-->|-->main|-->java:代码 |-->|-->main|--

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值