使用codis的java端jodis时 ,看到proxy 的PooledObject 对象的定义为
public PooledObject(String addr, JedisPool pool) {
this.addr = addr;
this.pool = pool;
}
而 jedis是直接使用了JedisPool,JedisPool有个returnResource的方法把连接放回连接池。
public class JedisPool extends Pool<Jedis> {
...
@Deprecated
public void returnResource(final Jedis resource) {
if (resource != null) {
try {
resource.resetState();
returnResourceObject(resource);
} catch (Exception e) {
returnBrokenResource(resource);
throw new JedisException("Could not return the resource to the pool", e);
}
}
}
考虑PooledObject如何实现returnResource? 上网找了以后发现,
/**
* The 2.6+ Jedis and the current Jodis have implemented the closeable
* interface . Therefore, you don't need to use pool to call
* returnResource() and you should invoke jedis.close() when you need to
* release the resource.
*/
于是,
@Override
public void close() throws DataAccessException {
// super.close();
this.getNativeConnection().close();
}