java自动化配置工具 - autoconfig 简介
对于java程序员来说各种各样的配置文件是司空见惯的,比如spring的bean配置,struts的action配置等等。有些配置会随着运行环境的变化而各不相同,最典型的就是jdbc驱动的配置,在开发环境可能链接到开发本地的数据库,测试环境则有一套测试专用的数据库环境,线上的生产环境也会有一套数据库,如果一个应用要部署到多个idc中,那这些配置又有可能各不相同。解决这个问题,可能有些团队使用同一份配置文件,在部署到不同的环境之前人肉的修改一下配置,还有些团队会为每一个环境维护一份配置文件。这些做法都比较容易出错,而且随着环境的增多成本会线性地增长。
本文通过一个示例简单介绍一个自动化的配置工具autoconfig。autoconfig使用一套配置模板,为不同的环境生成相应的具体配置。它的核心思想是把一些可变的配置定义为一个模板,在autoconfig运行的时候从这些模板中生成具体的配置文件。autoconfig支持两种运行方式,第一种是作为普通的java应用程序从命令行来调用,另一种是作为maven的插件来运行。本文通过一个maven项目展示一下如何在maven中使用autoconfig。
autoconfig是一个淘宝开源的web框架webx的一个工具包,svn地址为 http://code.taobao.org/svn/webx/citrus-tool/trunk/,使用之前先checkout源代码本地安装一下,当然感兴趣的同学也可已研究一下它的源代码。安装非常简单,在checkout的源代码的根目录下运行 mvn clean install -Dmaven.test.skip。由于autoconfig使用maven build,安装之前必须先安装maven,不知到如何安装maven的同学可以google一下。
创建antoconfig的描述文件auto-config.xml以及配置文件config.properties的模板config.properties.vm。
config.properties的模板内容如下,它只有一行配置。
key = ${net_kiminotes_value}
antoconfig的描述文件auto-config.xml内容如下。
<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,为什么在auto-config.xml文件中会定义属性 net.kiminotes.value 呢?现在只需要记住属性名中的点在autoconfig执行的时候会被替换成下划线,具体原因会在后续的blog中解释。
最后在pom中配置一下maven autoconfig插件,整个pom文件如下。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/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.alibaba.citrus.tool</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>
<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包。

java自动化配置工具 - autoconfig 简介的更多相关文章
- java环境配置——工具下载地址
每次官网找个下载地址都是 费劲巴拉的 整理了一下几个下载地址分享给大家 eclipse:http://www.eclipse.org/downloads/packages/release/Kepler ...
- Java代码混淆工具ProGuard
目录 Java代码混淆工具ProGuard 简介 描述 作用的环境 功能 工作原理 下载 使用时注意事项 版本问题 JDK位数问题 Java的字节码验证问题 关于使用类似于Hibernate的对象关系 ...
- JProtector java应用加密工具
JProtector 专业的java项目加密工具 JProtector简介: JProtector 专业的java项目加密工具.目前java开发的项目发布的时候需要将项目发布到用户手中,但由于一 ...
- [刘阳Java]_避开环境配置快速的使用Java的开发工具_第5讲
我们一般学习Java都应该遵循通过系统的命令工具来编译Java程序,然后对编译好Java程序进行运行,这个是非常好的习惯.但是随着后期学习Java技术的深入我们也得像Java的IDE工具屈服.所以,可 ...
- Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm
JDK内置工具使用 一.javah命令(C Header and Stub File Generator) 二.jps命令(Java Virtual Machine Process Status To ...
- Java反编译工具CFR,Procyon简介
Java反编译工具有很多,个人觉得使用最方便的是jd-gui,当然jad也不错,jd-gui主要提供了图形界面,操作起来很方便,但是jd-gui很久没有更新了,java 7出来很久了,jd-gui在反 ...
- java的配置方式简介
1,java的配置方式简介java的配置方式是为了代替使用xml配置方式,主要使用两个注解:@Configuration//通过该注解来表明该类是一个spring的配置,相当于一个xml文件@Comp ...
- puppet开源的软件自动化配置和部署工具——本质就是CS,服务端统一管理配置
1. 概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到了越来越多地关注,现在很多大型IT公司均在使用puppet对集群中的软件进行管理和部署,如google利用p ...
- Java Heap dump文件分析工具jhat简介
jhat 是Java堆分析工具(Java heap Analyzes Tool). 在JDK6u7之后成为标配. 使用该命令需要有一定的Java开发经验,官方不对此工具提供技术支持和客户服务. 用法: ...
随机推荐
- Entity Framework 学习系列(2) - MySql Database First 开发方式
目录 写在前面 环境 下载MySQL连接工具 创建Databse First 1.创建控制台 2.创建数据库 3.安装 MySQL.Data 和MySQL.Data.Entity 3.在项目中添加数据 ...
- C# ThreadStart中如何带参数
1.ThreadStart 线程执行带参数的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); })); ...
- 使用HttpWebRequest POST上传文件
2019/10/27, .Net c#代码片段 摘要:使用HttpWebRequest向Api接口发送文件,multipart-form数据格式,POST方式 参考地址 /// <summary ...
- asp.net 报错 SAP 报错 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
“/”应用程序中的服务器错误. 试图加载格式不正确的程序. (异常来自 HRESULT:0x8007000B) 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该 ...
- kbmmw 网络研讨会视频回放(更新至11.9)
kbmmw 近期举行了几次网络视频直播,为了方便大家观看,放在了优酷上面. 1.Firemonkey for Linux and RAD Server 和kbmmw smartbing for Tli ...
- golang之类型零值初始化及比较
综述 变量声明时未赋初值,则变量被自动赋值为该类型的零值(固定值) func new(Type) *Type new()返回一个指针,指向新分配的该类型的零值,不是空指针(nil).the value ...
- 百度云人脸识别API人脸库管理
from urllib import request import base64 import requests import re import json import urllib impor ...
- 互斥锁的robust属性的介绍和使用
一个具体的场景:在多线程中,当一个线程获得锁之后异常退出后,应该怎么处理? 方案一 使用锁的robust特性 简单地讲,就是当拥有这个锁的线程挂了后,下一个尝试去获得锁的线程会得到EOWNWERDEA ...
- django项目中使用KindEditor富文本编辑器。
先从官网下载插件,放在static文件下 前端引入 <script type="text/javascript" src="/static/back/kindedi ...
- 使用Python音频双通道分离
某些音频是双方对话,有可能需要对音频作通道的分离. 示例代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- """ 音 ...