在Pool2组件中,主要的两个类
- PooledObjectFactory用于管理被池化的对象的产生、激活、挂起、校验和销毁;
- ObjectPool用于管理要被池化的对象的借出和归还,并通知PooledObjectFactory完成相应的工作;
package com.cdw.pool;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
public class StringBufferFactory extends BasePooledObjectFactory<StringBuffer>{
@Override
public StringBuffer create() throws Exception {
return new StringBuffer();
}
/**
* Use the default PooledObject implementation.
*/
@Override
public PooledObject<StringBuffer> wrap(StringBuffer buffer) {
return new DefaultPooledObject<StringBuffer>(buffer);
}
/**
* When an object is returned to the pool, clear the buffer.
*/
@Override
public void passivateObject(PooledObject<StringBuffer> pooledObject) {
pooledObject.getObject().setLength(0);
}
}
package com.cdw.pool;
import java.io.IOException;
import java.io.Reader;
import org.apache.commons.pool2.ObjectPool;
public class ReaderUtil {
private ObjectPool<StringBuffer> pool;
public ReaderUtil(ObjectPool<StringBuffer> pool) {
this.pool = pool;
}
/**
* Dumps the contents of the {@link Reader} to a String, closing the {@link Reader} when done.
*/
public String readToString(Reader in)
throws IOException {
StringBuffer buf = null;
try {
buf = pool.borrowObject();
for (int c = in.read(); c != -1; c = in.read()) {
buf.append((char) c);
}
return buf.toString();
} catch (IOException e) {
throw e;
} catch (Exception e) {
throw new RuntimeException("Unable to borrow buffer from pool" + e.toString());
} finally {
try {
in.close();
} catch (Exception e) {
// ignored
}
try {
if (null != buf) {
pool.returnObject(buf);
}
} catch (Exception e) {
// ignored
}
}
}
}
package com.cdw.pool;
import java.io.File;
import java.io.FileReader;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.GenericObjectPool;
public class Test {
public static void main(String[] args) throws Exception {
//1:创立pooledObjectFactory
PooledObjectFactory<StringBuffer> sbFactory = new StringBufferFactory();
//2:创立ObjectPool
ObjectPool<StringBuffer> bjPool = new GenericObjectPool<StringBuffer>(sbFactory);
ReaderUtil readerUtil = new ReaderUtil(bjPool);
String s = readerUtil.readToString(new FileReader(new File("dbcp.properties")));
System.out.println(s);
}
}