`
dylan0514sina.cn
  • 浏览: 92433 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

commons-configuration的使用

阅读更多
关于apache commons的综合使用

背景:开发一个使用xml配置文件来处理跨数据库的数据操作。例如,我本地有一个mysql数据库叫A,里面有一个表叫test,test有两个字段,fistName和lastName;另一个服务器上有一个Oracle数据库叫B,里面有两个表,test1,test2,他两的结构是一样的,都有,Name这个字段;现在就是要把A中的表test里的fistName和lastName做字符串连接,然后存到B中的表test1,test2的Name字段。
  
commons-configuration的使用
得到XMLConfiguration 的几种方式
XMLConfiguration config  = new XMLConfiguration(String);
XMLConfiguration config = new XMLConfiguration();
config.load(String);

我自己是不喜欢操作xml的,所以就没有使用dom4j和jdom的习惯。使用commons-configuration令我最爽的地方是指针式的访问方式,例如,在如下xml中,如果你得到code属性的值,只需要写如下Java代码
List codes = config.getList("columns.column.[@code]");
  <?xml version="1.0" encoding="UTF-8"?>	
<origin dataSource="ds">
		
	<columns>
				<column code="ID" name="" type="java.lang.Integer" length="" />
				<column code="FIRSTNAME" name="" type="java.lang.String" length="" />
				<column code="LASTNAME" name="" type="java.lang.String" length="" />
				<column code="SEX" name="" type="java.lang.String" length="" />
	</columns>
</origin>

如果你的得到的字符串中有逗号,那么他会以","分割,只会得到第一个字符串。所以你必须用"\"转义,例如
 String array = config.getString("config.array"); //array="10",并不是10,20,30,40
 String scalar = config.getString("config.scalar"); // scalar="3,1415"
 String text = config.getString("config.cite.[@text]"); // text ="To be or not to be, this is the question!"

 <config>
   <array>10,20,30,40</array>
   <scalar>3\,1415</scalar>
   <cite text="To be or not to be\, this is the question!"/>
 </config>

默认情况下,config以","分割字符串,其实还可以使用如下方法(AbstractConfiguration 是XMLConfiguration 的父类)
AbstractConfiguration.setListDelimiter(char listDelimiter) //设置限定符
AbstractConfiguration.setDelimiterParsingDisabled(boolean) //设置限定符是否有效

注意:以上方法的设置要xml文件load之前(换而言之,是不能使用XMLConfiguration config = new XMLConfiguration(String)),否则,此次设置将无效,正确使用如下方式
XMLConfiguration config = new XMLConfiguration();
config.setDelimiterParsingDisabled(true);
try {
	config.load(path);
    } catch (Exception e) {
	// TODO Auto-generated catch block
	logger.error("载入文件出错",e);
} 

还有一个比较常用的方法,例如你想把column中的属性全部取出到一个叫Bean的Java类中,你就必须定位到column,这时常用以下方式
List<HierarchicalConfiguration>  columns = (List<HierarchicalConfiguration>) config.configurationsAt("origin.columns.column");
List Beans = new ArrayList(columns.size());
	for (int i = 0; i < columns.size(); i++) {
	HierarchicalConfiguration column = (HierarchicalConfiguration)columns.get(i);
      Bean bean = new Bean();
      bean.setCode(column.getString("[@code]"));
      bean.setName(column.getString("[@name]"));
      ...
      ...
      beans.add(bean);
	}
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics