当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>J2EE

Replace2 解决多环境部署问题

    Replace2是我写的一个ant 任务,ant内置的有一个replace任务,用于替换指定文件里的某些内容,如log4j.properties里:

    log4j.appender.Y.File =@@Log.FilePath@@

    replace任务可以读取一个属性配置文件,如下内容

    Log.FilePath = E:\temp\info.log

    WebService = http://10.1.120.133:7001/XXX/BookService

    这个Replace 任务有一个用法就是解决多环境部署,也就是说,如果你现在有一个测试系统,又有一个开发系统,它们连着不同的地址的数据库,不同地址的 WebService,以及不同地址的FTP服务,那么,你在部署的时候必须将这些内容写到配置文件里,手工写比较繁琐,而且容易出错,一个好的办法就是采用replace任务,只需要写一个testenv.properties,再写一个devlopenv.properties,里面各包含了目标环境的配置信息,然后运行此,去替换可能的配置文件,如log4j.properties,hibernate.cfg.xml 等等。如果还是很不好理解的话,可以参考http://ant.apache.org/manual/CoreTasks/replace.html,了解它的用法后再看下文,否则更不好理解

    Replace应用于多环境部署固然可以,不过却忽略了开发的需要,想想看,如果log4j.appender.Y.File =@@Log.FilePath@@那么你在调试程序的时候必然出错。再比如,数据源的配置

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url">
        <value>@@JBDC.URL@@</value>
    </property>
    <property name="username">
        <value>@@JBDC.USER@@</value>
    </property>
    <property name="password">
        <value>@@JBDC.PWD@@</value>
    </property>
    <property name="driverClassName">
        <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    </bean>

    那这也没有办法让程序运行。

    Replace2 是我写的一个ant task,其目的正是兼顾多环境部署以及开发需要。用法同Replace,不同的地方是在于配置文件跟正常文件一样,并且在上方多了一行注释如下;# log4j.appender.Y.File = @@Log.FilePath@@ log4j.appender.Y.File = E:\temp\info.log

    Replace2任务将根据注释里的内容替换紧接下一行的内容,如果env.properties 里的内容有Log.FilePath=/opt/xxx/data/logs/info.log 那么替换后的文件内容就是

    # log4j.appender.Y.File = @@Log.FilePath@@ log4j.appender.Y.File = /opt/xxx/data/logs/info.log.

    这样,即不影响正常开发,又会在部署,特别是多环境部署的时候起动作用。

    下面是使用方法:

   <target name="use" description="Use the Task" depends="jar">
         <taskdef name="replace2" classname="com.xxx.ant.Replace2" classpath="${replace2.jar}"/>
         <replace2 token="##" propertisFile="${basedir}/env.properties">
                   <filePath path="${basedir}/log4j.properties"/>
                  <filePath path="${webapp}/WEB-INFO/web.xml"/>
                    <filePath path="${build.home}/hibernate.cfg.xml"/>
                   <filePath path="${src}/com/xxx/Gloable.java"/>
         </replace2>
    </target>

    代码在google上http://code.google.com/p/replace2/

    预览代码http://code.google.com/p/replace2/source/browse/

相关内容
赞助商链接