Connection connection = DriverManager.getConnection("proxool.test-pool");
//use connection …
if (connection != null) {
connection.close();
}
从proxool连接池中获取的连接,在使用完毕后必须调用close方法,否则连接池中的空闲连接就会越来越少。
不过,这段代码乍看起来像是把连接给关闭了。其实不然,Connection是一个接口(interface),实际返回的是WrappedConnection,里面包装着ProxyConnection。
ProxyConnection是proxool实现的,它重写了Connection接口的close方法。
public void close() throws SQLException {
try {
…
if (!removed) {
connectionPool.putConnection(this);
}
} catch (Throwable t) {
connectionPool.getLog().error("…", t);
}
}
这里只贴出了关键代码,可以看到proxool将连接回收到了connectionPool里面。