由于项目中多个需要xml解析东东,关于xml解析的效率以及性能等方面的问题,这里就不再说了,据说性能比较好的SAXReader和XStream等,我们在项目中采用SAXReader解析。
首先要说一说连接池原理:
对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。
该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调整提供依据。
SAXReader的缓冲池的实现过程如下:
在项目中创建一个FastSAXReader的类,创建一个SAXReader解析的连接池对象在类的静态语句块中初始化一定数量的SAXReader对象将之放在一个集合中在使用时获取,使用完毕释放(类似缓冲池原理但是不是缓冲池原理,它没有在SAXReader没有或不足时的堆栈监控状态的东东)。
常用一个文件装换Document对象的方法:
public static Document loadXml(InputStream inputStream, EntityResolver entityResolver) {
//FastSAXReader类似连接池的东东
SAXReader saxReader = FastSAXReader.getReader();
if (entityResolver != null) {
saxReader.setEntityResolver(entityResolver);
}
Document doc = null;
try {
InputStreamReader ir = new InputStreamReader(inputStream, "UTF-8");
doc = saxReader.read(ir);
} catch (Exception e) {
ReflectionUtils.rethrowRuntimeException(e);
} finally {
if (entityResolver != null) {
saxReader.setEntityResolver(null);
}
FastSAXReader.release(saxReader);
}
return doc;
}