天天看点

Webx框架:AutoConfigAutoConfigAutoExpand

AutoConfig

AutoConfig是一个小工具,用于解决不同机器之间配置不同的问题。有时候有些配置,比如数据库地址、缓存地址等,这些配置与环境有关。每次在不同的环境中都需要重新修改配置,比较麻烦。解决这个问题有两种方法,一种是通过maven中的filter工具,另外一种是使用autoconfig。maven-filter工具的缺点是,当项目编译打包之后,无法再修改配置文件。而autoconfig可以通过一个脚本指令,直接修改打包过的配置文件,不需要重新编译,这样节省了不少时间。

接下来介绍用法,包括开发阶段和部署阶段。开发阶段首先在

META-INF

文件夹中增加

autoconf/auto-config.xml

文件。下面是该文件的示例内容:

<?xml version="1.0" encoding="UTF-8"?>
 
 
  <config>
 
 
    <group>
 
 
      <property name="petstore.work" description= "应用程序的工作目录" />
 
 
      <property name="petstore.loggingRoot" defaultValue="${petstore.work}/logs" description= "日志文件目录" />
 
 
      <property name="petstore.upload" defaultValue="${petstore.work}/upload" description="上传文件的目录" />
 
 
      <property name="petstore.loggingLevel" defaultValue="warn" description="日志文件级别" >
 
 
        <validator name="choice" choice="trace, debug, info, warn, error" />
 
 
      </property>
 
 
    </group>
 
 
    <script>
 
 
      <generate template="WEB-INF/web.xml" />
 
 
      <generate template="WEB-INF/common/resources.xml" />
 
 
    </script>
 
 
  </config>
       

下面是每个标签的解释:

property

标签。有

name/defaultValue/description/required

属性。顾名思义,这里就不赘述了。

validator

标签。用于验证参数是否填写正确。支持的验证器有以下几种。

<validator name="boolean" />
 
 
  <validator name="choice" choice="trace, debug, info, warn, error" />
 
 
  <validator name="email" />
 
 
  <validator name="fileExist" [file="WEB-INF/web.xml"] /> 文件必须存在
 
 
  <validator name="hostExist" /> 合法IP
 
 
  <validator name="keyword" /> 只能由字母数字下划线组成
 
 
  <validator name="number" />
 
 
  <validator name="regexp" regexp="..."/>
       

generate

标签。表示替换该文件中的placeholder。有

template/destfile/charset/outputCharset

参数。

在maven中加入

autoconfig

<build>
 
 
      <plugins>
 
 
          <plugin>
 
 
              <groupId>com.alibaba.citrus.tool</groupId>
 
 
              <artifactId>autoconfig-maven-plugin</artifactId>
 
 
              <version>1.2</version>
 
 
              <configuration>
 
 
                  <!-- 要进行 AutoConfig 的目标文件,默认为${project.artifact.file}。
 
 
                  <dest>${project.artifact.file}</dest>
 
 
                  -->
 
 
                  <!-- 配置后,是否展开目标文件,默认为false,不展开。
 
 
                  <exploding>true</exploding>
 
 
                  -->
 
 
                  <!-- 展开到指定目录,默认为 ${project.build.directory}/ ${project.build.finalName}。
 
 
                  <explodedDirectory>
 
 
                  ${project.build.directory}/${project.build.finalName}
 
 
                  </explodedDirectory>
 
 
                  -->
 
 
              </configuration>
 
 
              <executions>
 
 
                  <execution>
 
 
                      <phase>package</phase>
 
 
                      <goals>
 
 
                          <goal>autoconfig</goal>
 
 
                      </goals>
 
 
                  </execution>
 
 
              </executions>
 
 
          </plugin>
 
 
      </plugins>
 
 
  </build>
       

部署阶段。首先从网上下载autoconfig工具:

  • antx-autoconfig-1.2.tgz
  • antx-autoexpand-1.2.tgz

安装到系统目录,比如

/usr/local/bin

中。

配置应用包。下面的命令将会修改

test.war

中的配置文件,将

placeholder

直接替换成属性值。

autoconfig test.war
       

或者

autoconfig test.war test-configured.war
       

如果希望有的

placeholder

不被替换,可以使用

${D\{myprop}}

共享参数。有些应用使用的相同的参数,就可以通过这个选项,一次配置,多方使用。

autoconfig -s share1.properties,share2.properties test.war
       

共享参数还可以引用网络上的配置文件,可以有多套默认配置。

其他命令。

autoconfig -i on # 交互模式 
 
 
  autoconfig -i off
 
 
  autoconfig -u file.xml # 配置file.xml文件 
 
 
  autoconfig -c GBK # 设置编码 
       

AutoExpand

用于嵌套展开一个应用包。