首页 文章 Jakarta Common Replace2解决多环境部署问题

邮件订阅

Replace2 解决多环境部署问题 E-mail
用户评价: / 0
好 
作者:Administrator   
2008-11-28 00:32

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/

支持我个人blog: http://space.baidu.com/joelli 

[:E]

最后更新于: 2008-11-28 00:32
 

欢迎转载

本站文章欢迎转载,但请注明出处(http://www.javajia.com,Java家)