java⾃动化配置⼯具-autoconfig简介
对于java程序员来说各种各样的配置⽂件是司空见惯的,⽐如spring的bean配置,struts的action配置等等。有些配置会随着运⾏环境的变化⽽各不相同,最典型的就是jdbc驱动的配置,在开发环境可能链接到开发本地的数据库,测试环境则有⼀套测试专⽤的数据库环境,线上的⽣产环境也会有⼀套数据库,如果⼀个应⽤要部署到多个idc中,那这些配置⼜有可能各不相同。解决这个问题,可能有些团队使⽤同⼀份配置⽂件,在部署到不同的环境之前⼈⾁的修改⼀下配置,还有些团队会为每⼀个环境维护⼀份配置⽂件。这些做法都⽐较容易出错,⽽且随着环境的增多成本会线性地增长。
本⽂通过⼀个⽰例简单介绍⼀个⾃动化的配置⼯具autoconfig。autoconfig使⽤⼀套配置模板,为不同的环境⽣成相应的具体配置。它的核⼼思想是把⼀些可变的配置定义为⼀个模板,在autoconfig运⾏的时候从这些模板中⽣成具体的配置⽂件。autoconfig⽀持两种运⾏⽅式,第⼀种是作为普通的java应⽤程序从命令⾏来调⽤,另⼀种是作为maven的插件来运⾏。本⽂通过⼀个maven项⽬展⽰⼀下如何在maven中使⽤autoconfig。
autoconfig是⼀个淘宝开源的web框架webx的⼀个⼯具包,svn地址为 /svn/webx/citrus-tool/trunk/,使⽤之前先checkout源代码本地安装⼀下,当然感兴趣的同学也可已研究⼀下它的源代码。安装⾮常简单,在checkout的源代码的根⽬录下运⾏ mvn clean ins
tall -st.skip。由于autoconfig使⽤maven build,安装之前必须先安装maven,不知到如何安装maven的同学可以google ⼀下。
创建antoconfig的描述⽂件l以及配置⽂件config.properties的模板config.properties.vm。
config.properties的模板内容如下,它只有⼀⾏配置。
key = ${net_kiminotes_value}
antoconfig的描述⽂件l内容如下。
<config>
<group>
<property name="net.kiminotes.value" />
</group>
<script>
<generate template="config.properties.vm" destfile="config.properties" charset="utf-8" />
</script>
</config>
property元素定义了⼀个需要autoconfig配置的属性 net.kiminotes.value。group元素把不同类库的property进⾏分组,这⾥仅配置了⼀个group。generate定义了⼀个配置⽂件⽣成策略,template属性定义了配置⽂件的的模板,destfile定义了⽣成后配置⽂件的存放位置。
注: 有⼈或许会感觉迷惑,在模板⽂件config.properties.vm中,需要被替换的明明是net_kiminotes_value,为什么在l⽂件中会定义属性 net.kiminotes.value 呢?现在只需要记住属性名中的点在autoconfig执⾏的时候会被替换成下划线,具体原因会在后续的blog中解释。
最后在pom中配置⼀下maven autoconfig插件,整个pom⽂件如下。
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.kiminotes</groupId>
<artifactId>autoconfig</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>com.l</groupId>
<artifactId>maven-autoconfig-plugin</artifactId>
<version>1.0.9</version>
<executions>
<!-- 配置在package phase中运⾏maven-autoconfig-plugin的autoconfig goal -->
<execution>
<id>config</id>
<goals>
<goal>autoconfig</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
spring怎么读取properties<configuration>
<archive>
<!-- 打出的jar包中的 MANIFEST.MF ⽂件中增加 Main-Class 这⼀项配置,这样就能在命令⾏中通过 java -jar 来执⾏打出的jar包 -->
<manifestEntries>
<Main-Class>net.kiminotes.Main</Main-Class>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<target>1.6</target>
<source>1.6</source>
</configuration>
</plugin>
</plugins>
</build>
</project>
在配置⽂件的模板 config.properties.vm 中有⼀个配置变量 ${net_kiminotes_value} 在执⾏autoconfig的时候需要被替换,那怎么给这个配置项赋值呢?autoconfig提供了两种⽅式来给配置变量赋值第⼀从java属性⽂件中读取第⼆是交互式地编辑。autoconfig⾸先读取当前⼯作⽬录的antx.properties⽂件,如果没有则读取${user.home}/antx.properties⽂件,如果这个⽂件也不存在,autoconfig就会启动交互式编辑器请求⽤户输⼊配置变量的值,如果配置变量的值是不完整的autoconfig则会⽴即停⽌配置并抛出⼀个异常。如果java属性⽂件的位置不在autoconfig默认的位置可以通过参数autoconfig.userProperties进⾏配置。处于简单其间,我们在当前⽬录新建⼀个java属性⽂件
antx.properties,这个⽂件中定义了配置变量${net_kiminotes_value}的值。antx.properties ⽂件的内容如下。
net.kiminotes.value = hello, world
整个项⽬的结构如下所⽰:
下⾯运⾏maven来build这个项⽬。运⾏ mvn package,在target⽬录下⽣成⼀个jar包autoconfig-1.0-SNAPSHOT.jar,运⾏这个jar包。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。