- 浏览: 7340070 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在一些项目可能配置文件经常变化,配置文件的类型可能为xml,或者properties文件等,我们系统会自动检测到配置文件的变化,自动更新到内存等中,可以采用Apache 的commons-confiugrations实现相关的功能。如在Tomcat中web.xml配置文件的变化,tomcat会自动加载。
在commons-configuration中自动保存代码如下:
PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties"); config.setAutoSave(true); config.setProperty("colors.background", "#000000); // the configuration is saved after this call
自动加载代码如下:
PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties"); config.setReloadingStrategy(new FileChangedReloadingStrategy());
FileChangedReloadingStrategy中重点代码如下:
public boolean reloadingRequired() { if (!reloading) { long now = System.currentTimeMillis(); if (now > lastChecked + refreshDelay) { lastChecked = now; if (hasChanged()) reloading = true; } } return reloading; }
在web项目写一个servlet类测试属性文件变化,并自动加载。
package com.easyway.app.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.reloading.FileChangedReloadingStrategy; public class ConfigurationServlet extends HttpServlet { /** * Constructor of the object. */ public ConfigurationServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); //从上下文中获取 PropertiesConfiguration propconfig=(PropertiesConfiguration)this.getServletContext().getAttribute("propconfig"); //打印信息到页面 String username=propconfig.getString("username"); out.println("用户的名称为:username ="+username); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); PropertiesConfiguration propconfig=(PropertiesConfiguration)this.getServletContext().getAttribute("propconfig"); String username=propconfig.getString("username"); out.println("username ="+username); out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occure */ public void init() throws ServletException { //读取配置的文件的名称 ServletContext servletContext = this.getServletContext(); String filename=servletContext.getInitParameter("appconfig"); System.out.println("filename"+filename); //创建自动加载的机制 PropertiesConfiguration propconfig=null; try { propconfig = new PropertiesConfiguration(filename); //设置编码 propconfig.setEncoding("UTF-8"); //设置自动冲加载机制 propconfig.setReloadingStrategy(new FileChangedReloadingStrategy()); //设置到ServletContext便于使用时候获取 servletContext.setAttribute("propconfig", propconfig); } catch (ConfigurationException e) { e.printStackTrace(); } } }
web.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <context-param> <param-name>appconfig</param-name> <param-value>jdbc.properties</param-value> </context-param> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>configurationServlet</servlet-name> <servlet-class>com.easyway.app.servlet.ConfigurationServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>configurationServlet</servlet-name> <url-pattern>/configurationServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
<?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>
XMLConfiguration config = new XMLConfiguration(String); //关于XML的读取在“commons-configuration的使用”中讲过 String id = config.getString("columns.column.[@code]"); //拿到第一个Column的code String type = config.getString("columns.column.[@type]"); //拿到第一个Column的type Object value = ConvertUtils.convert(id,Class.forName(type)); //转换了
背景:开发一个使用xml配置文件来处理跨数据库的数据操作。例如,我本地有一个mysql数据库叫A,里面有一个表叫test,test有两个字段,fistName和lastName;另一个服务器上有一个Oracle数据库叫B,里面有两个表,test1,test2,他两的结构是一样的,都有,Name这个字段;现在就是要把A中的表test里的fistName和lastName做字符串连接,然后存到B中的表test1,test2的Name字段。
得到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); }
- WebConfig.zip (5.9 MB)
- 下载次数: 429
发表评论
-
[转]Jython初探
2014-01-07 11:19 2409转载自: ... -
ireport导出各种格式(pdf,excel,word,html,print)
2013-05-02 16:59 10050import java.io.IOException; ... -
【转】使用Atomikos Transactions Essentials实现多数据源JTA分布式事务
2013-04-03 12:11 6794Atomikos数据源配置方法有三种 Atomikos数 ... -
【转】Apache Thrift入门1-架构&介绍
2013-04-02 13:26 2039Thrift 是什么? Thrift ... -
【转】Thrift入门及Java实例演示
2013-04-02 12:47 2587目录: 概述 下载配置 基本概念 数据类型 ... -
【转】Thrift入门试用
2013-04-02 12:39 2182在新的项目中公司在平台内部系统间使用Thrift通讯,都没 ... -
【转】thrift的安装
2013-04-02 12:38 2092一、ubuntu下thrift的安装 1.下载源代码 ... -
GIS的学习(二十五)geoserver wms中的各种操作API详细讲解和使用
2012-09-10 17:42 9709官方geoserver中WMS服务中几种操作的API的详细说明 ... -
POI3.8组件研究(九)----让POI架起Java与Office之间的桥梁
2012-06-17 14:37 4328本文将阐述如何用POI来读取/写入完整的Excel文 ... -
POI3.8组件研究(八)--基于SXSSF (Streaming Usermodel API)的写文件
2012-06-17 14:17 14436在POI3.8中SXSSF仅仅支持excel2 ... -
POI3.8组件研究(七)--基于XSSF and SAX (Event API)事件的解析
2012-06-17 14:00 5368针对Event API事件解析仅仅支持excel97~ ... -
POI3.8组件研究(六)---struts2.0 视图层文件页面点击导出
2012-06-17 13:23 2419在struts2.0中点击导出按钮将信息导出为exce ... -
POI3.8组件研究(五)---excel文件内容抽取为文本
2012-06-15 09:15 4366在一个搜索引擎的使用中需要将各种文件转化为文本 ... -
POI3.8组件研究(四)--Event API (HSSF Only)事件的解析
2012-06-14 17:37 9064通过eventusermodel读取文件 ... -
POI3.8组件研究(二)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
2012-06-14 09:46 3218在解析生成excel2003和 ... -
POI3.8组件研究(一)---基于User API (HSSF and XSSF)解析Excel2003和2007文件
2012-06-14 09:29 5355在以前的Excel解析时候,我们通常需要编写Ex ... -
EasyPOI的使用
2012-02-12 17:06 5320EasyPOI 的目的是封装了poi的写excel的API。 ... -
Commons-net FTPClient上传下载的封装
2011-08-25 08:30 11512在项目中使用到FTP功能,于是采用类似Spri ... -
Java将第三方jar文件打包到一个jar中的插件(fatjar)
2011-08-19 22:17 4337<!-- google_ad_section_star ... -
Quartz的任务的临时启动和暂停和恢复
2011-07-16 10:18 40227在项目中需要手动启停某些服务,那么需要有一个控 ...
相关推荐
《Apache Commons Configuration详解》 Apache Commons Configuration 是一个用于处理配置文件的开源库,主要应用于Java环境中。这个库提供了一种灵活的方式来读取和管理不同格式的配置文件,如XML、INI、...
Apache Commons Configuration 是一个Java库,专门用于处理配置文件和提供灵活的访问配置数据的API。这个库被设计成模块化和可扩展的,允许开发者在各种各样的应用场景中轻松地处理配置参数。"commons-configuration...
Apache Commons Configuration 是一个Java库,主要用于处理配置文件和属性设置。这个开源项目为Java应用程序提供了一个灵活的方式来管理和读取各种类型的配置资源,如XML、INI、属性文件等。`commons-configuration-...
Apache Commons Configuration 是一个 Java 库,它为处理各种类型的配置文件和提供了一种灵活的 API。这个库使得在 Java 应用程序中读取、写入和管理配置参数变得非常简单。下面我们将深入探讨 Commons ...
Apache Commons Configuration 是一个Java库,专门用于处理各种配置文件和属性。这个库为开发者提供了方便的方式来管理和解析配置数据,无论是简单的键值对格式(如.properties文件)还是更复杂的XML文件。"commons-...
本篇文章将深入探讨两种加载配置文件的方法——使用Java内置的`Properties`类和`InputStream`,以及第三方库Apache Commons Configuration。我们将讨论每种方法的优缺点,并通过实例来演示如何使用它们。 首先,让...
Apache Commons Configuration 是一个强大的 Java 库,它简化了应用程序中配置文件的处理工作。这个库允许开发者以灵活的方式读取和管理不同格式的配置文件,包括但不限于 `.properties`、`.xml`、`.ini` 和从 JNDI...
Apache Commons Configuration 2 是该库的一个更新版本,它引入了更多特性和改进,以适应现代 Java 开发的需求。 在 Apache Commons Configuration 2 中,有几个核心概念和关键功能,包括: 1. **配置源...
Apache Commons Configuration 是一个Java库,它提供了一组高级配置接口和类,用于处理应用程序的配置文件。在这些接口中,`XMLConfiguration` 是一个重要的组件,专门设计用来处理XML格式的配置文件。在这个范例中...
在这个场景中,我们使用的是版本1.6的`commons-configuration-1.6.jar`,它依赖于其他几个Apache Commons库,如`commons-collections-3.2.jar`、`commons-lang-2.3.jar`和`commons-logging-1.1.1.jar`。这些库分别...
8. **Apache Commons Configuration**: 提供了灵活的配置文件处理,可以读取 XML、INI、系统属性等多种格式的配置文件。 9. **Apache Commons JCI**: 用于Java编译器接口,可以帮助你在运行时动态编译 Java 代码。 ...
10. **Commons Configuration**: 提供了一种灵活的方式来读取和管理配置信息,支持从不同来源(如文件、系统属性、环境变量等)加载配置。 这些仅是Apache Commons项目中的一部分,每个都有自己的特色和用途。在...
`Commons-configuration-1.3-API.chm`涵盖了如何加载、解析和管理这些配置信息的API,使得在程序中动态读取和修改配置变得容易。 3. **Commons Lang**: Commons Lang提供了一些Java语言核心类的补充,包括字符串...
在`configurationDemo`文件中,可能包含了一个简单的Java应用,该应用展示了如何使用Apache Commons Configuration库进行配置文件的【增删改查】操作以及动态加载。通过运行这个案例,我们可以更直观地理解这些功能...
commons-configuration 可以从xml、properties、JNDI、JDBC、System properties、Applet parameters和Servlet parameters等读取信息 commons-daemon 可以帮你实现将一个普通的 Java 应用变成系统的一个后台服务 ...
commons-configuration 可以从xml、properties、JNDI、JDBC、System properties、Applet parameters和Servlet parameters等读取信息 commons-daemon 可以帮你实现将一个普通的 Java 应用变成系统的一个后台服务 ...
尽管Commons Logging因其轻量级和灵活的特性深受喜爱,但它也有一些争议,比如性能问题和初始化时的类加载顺序问题。然而,对于大多数项目来说,这些问题并不会成为严重的问题,且可以通过适当的配置和使用技巧来...
**Apache Commons Configuration** 是一个强大的配置管理工具,支持多种配置文件格式,如Properties文件、XML文档、JNDI等。 - **多格式支持**: 支持多种配置文件格式,可以根据实际需求选择最合适的格式。 - **...