autoconfig简介:

autoconfig是阿里巴巴提供的一款开源web项目配置工具,源代码svn地址为 http://code.taobao.org/svn/webx/citrus-tool/trunk/。在checkout的源代码的根目录下运行 mvn clean install -Dmaven.test.skip。由于autoconfig使用maven build,安装之前必须先安装maven。

autoconfig功能:

提供项目配置文件中的placeholder(¥{****})占位符替换功能 ,支持编译时替换,运行时替换。

例如在webx中定义的placeholder

${productionMode:true}

在启动时可以加入 jvm 参数:-productionMode=false|true 指定使用哪一种模式,默认值为true 在${productionMode:true}中已经设置了默认值。

autoconfig优点:

配置文件是静态的,只需要在编写时加入占位符。在具体时环境中替换不同的参数本身不需要修改。

可以随时改变参数的值,只需要在启动时指定不同的jvm参数或指定不同的properties文件即可。

配置文件与程序分离,不需要在程序中加入特定逻辑,低耦合便于应用。

不足:

并不是所有的框架都支持autoconfig

支持该技术的框架各有不同的用法。例如:Spring和Log4j都支持placeholder替换,然则它们的做法是完全不同的。Spring通过PropertyPlaceholderConfigurer类来配置,而Log4j则需要在DomConfigurator中把参数传进去。

autoconfig 使用:

1:集成在maven中

在maven中加入plugins 作为一个外部插件集成 加入配置如下:

com.alibaba.citrus.tool

autoconfig-maven-plugin

${autoconfig-plugin-version}

package

autoconfig

每次mvn package 或 mvn install 执行时都会自动引用 autoconfig 根据auto-config.xml配置的信息进行替换。

2:独立使用

根据提示安装完成,最简单操作 autoconfig test.war

autoconfig 配置:

核心配置文件:auto-config.xml 默认文件位置/src/main/resources/META-INF/autoconf/auto-config.xml。或/META-INF/autoconf/auto-config.xml(是否可以修改还不知道,大神们知道的求指导)

autoconfig结构

---第一行xml格式,即制定编码格式

-- 组册属性,每一个用到的属性(${***})都需要在这里注册,property 完整格式

name="..." ---名称

[defaultValue="..."] --默认值

[description="..."] --描述

[required="true|false"] --是否必须>

--验证规则

-- 可以有多个

...

********************************************

description="应用程序的工作目录"/>

defaultValue="${petstore.work}/logs"

description="日志文件目录"/>

defaultValue="${petstore.work}/upload"

description="上传文件的目录"/>

defaultValue="warn"

description="日志文件级别">

choice="trace, debug, info, warn, error"/>

--指定对那些.xml 进行替换

autoconfig 属性(auto-config.xml中的property)中的验证规则

取值只能时 false 或 true

取值只能是限定的chioce选项

邮件格式验证

配置的文件或路径必须已经存在, file是可选项用于配置选择文件或文件夹的位置

值必须为合法的IP地址,或者可以解析得到的域名。

值必须为字母、数字、下划线的组合。

值必须是munber

regexp="..."

[mode="exact|prefix|contain"]/>。

值必须符合regexp所指的正则表达式。

其中,mode为匹配的方法:

完全匹配exact

前缀匹配prefix

包含contain

如未指定mode,默认mode为contain

auto-config 中generate的配置选项

template="..." --指定需要修改的文件

[destfile="..."] --修改后的文件名 默认与原文件同名

[charset="..."] -- 指定读取文件的编码格式 如果是xml 或读取xml配置charset编码格式 ,对其它文件必须指定charset

[outputCharset="..."] --输出文件编码格式 默认和原文件相同编码格式>

13.3.3.1. 模板文件的位置

定义完auto-config.xml描述文件以后,就可以创建模板了。模板放在哪里呢?举例说明。

例 13.9. 模板文件的位置

假设在一个典型的WEB应用中,你的auto-config.xml中包含指定了如下模板:

...

那么,你可以把file1.xml、file2.xml、file3.xml放在下面的位置:

war-project(源目录结构) -> war-project.war(目标目录结构)

│ pom.xml

└─src

└─main

├─java

├─resources -> /WEB-INF/classes

│ file1.xml file1.xml - 建议放在这里

│ file2.xml file2.xml - 建议放在这里

└─webapp

├─META-INF

│ └─autoconf

│ │ auto-config.xml

│ │

│ └─WEB-INF -> /WEB-INF

│ │ file3.xml file3.xml - 也可以放在这里

│ │

│ └─classes -> /WEB-INF/classes

│ file1.xml file1.xml - 也可以放在这里

│ file2.xml file2.xml - 也可以放在这里

└─WEB-INF -> /WEB-INF

file3.xml file3.xml - 建议放在这里

AutoConfig的寻找模板的逻辑是:

如果在auto-config.xml所在的目录下发现模板文件,就使用它;

否则在包的根目录中查找模板文件;如果两处均未找到,则报错。

13.3.3.2. 模板的写法

书写模板是很简单的事,你只要:

把需要配置的点替换成placeholder:“${property.name}”。当然,你得确保property.name被定义在auto-config.xml中。

假如模板中包含不希望被替换的运行时的placeholder“${...}”,需要更改成“${D}{...}” 。

例 13.10. 模板示例

...

loggingRoot

${petstore.loggingRoot}

loggingLevel

${petstore.loggingLevel}

...

${D}{runtime.placeholder}

此外,AutoConfig模板其实是由Velocity模板引擎来渲染的。因此,所有的placeholder必须能够通过velocity的语法。

例 13.11. 使用不符合velocity语法的placeholders

例如,下面的placeholder被velocity看作非法:

${my.property.2}

解决的办法是,改写成如下样式:

${my_property_2}

参考网址:http://www.openwebx.org/docs/autoconfig.html

java autoconfig_auto-config 学习笔记相关推荐

  1. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

  2. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  3. java.util.List学习笔记

    概述 在Java中,List是一种特殊的集合结构,即:List是一种有序的集合.在List接口的实现中,需要提供根据列表下表对元素进行操作的方法,包括:插入,删除,查询和修改等: List一般允许重复 ...

  4. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  5. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  6. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  7. Java快速入门学习笔记6 | Java语言中的for循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记5 | Java语言中的while循环语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记4 | Java语言中的if条件语句

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  10. Java快速入门学习笔记3 | Java语言中的表达式与操作符

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. 2022-2028年中国塑料网格板行业市场行情动态及发展趋向分析报告
  2. 联想win10摁F2一直无法进入BIOS
  3. openwrt使用3G上网卡
  4. numpy 下的数据结构与数据类型的转换(np.array vs. np.asarray)
  5. net.sf.json将string转为map
  6. Linux进程间通信一 System V 共享内存简介与示例
  7. dbda.class.php 下载,DBDA
  8. Linux date命令的用法
  9. 校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了
  10. LeetCode 2201. 统计可以提取的工件(哈希)
  11. PKU 学生反馈 2009 - 4
  12. 例2.8 叠筐 - 九度教程第15题(排版题)
  13. 那些年我们一起追过的稀奇古怪的SQL
  14. 2.2.9 12306火车订票验证码处理
  15. 中南民族大学计算机组成原理实验,中南民族大学计算机组成原理试题及答案剖析...
  16. Fabric2.3分布式部署
  17. CAD软件中怎么合并表格?CAD表格合并技巧
  18. Vue开发版本与生产版本的区别
  19. fatal: unable to access ‘https://gitee.com/****/****.git/‘: The requested URL returned error
  20. 解决在vue中切换图片,gif格式的图片停在最后一帧的问题

热门文章

  1. caffe之训练数据格式
  2. jaf java_J2EE—JAF和JavaMail
  3. 微软和海量科技合作 推企业搜索引擎新方案
  4. 额温枪的误差分析和测量方法
  5. 在线Matlab编辑器
  6. 计算机组成原理|第四章(笔记)
  7. Pokemon with stats(口袋妖怪统计数据集)
  8. 笔记本拔掉电源后屏幕变暗的解决方案
  9. D12-AcWing-复习842-848800-803+2816785-790795-798
  10. 将PDF和图片文件如何转为Word或Excel分享几种转换器软件方法