关于GenericObjectPool连接池释放的问题

技术 2016-09-04

周末加班,没什么政治任务,就打算解决一下上个星期困扰了开发团队一周的问题 —————— Hession服务接口连接不释放。

现象就是比如maxActive设置为10,则调用10次此接口,连接数就会满,无法继续调用,只能重启服务器。幸亏是这个远程接口不经常调用,所以开发团队就这么纠结着用了一星期。

正文:

监控NumActive的值,每次递增,直到增加到maxActive的值,再调用接口就调用不到了,所以推测是因为没有释放掉用完的Active连接数,下一步查看GenericObjectPool (Apache Commons Pool 2.4.2 API),看到有关于释放连接的东西,是returnObject这个方法,传参是一个泛型,我猜测是被调用服务的接口,所以尝试着封装了一个方法。

    public <T> void releaseService(T t,String serviceName) throws Exception{
    GenericObjectPool pool = poolFacotryMaps.get(serviceName);
    pool.returnObject(t);
}

然后在所有调用方法结束之前,调用这个方法,来释放连接,果不其然,再次监控NumActive的时候,一直保持在2-10之间,可以正常释放掉连接。

问题解决!

总结:到此其实还没有彻底解决我的疑虑,为什么Spring的IOC容器没有帮我很好的管理bean的生命周期?我想这是我下一步要研究的东西。还有就是以后要多注意这方面的问题,因为今天已经确定,Spring也不是万能啊,哈哈。

楼主残忍的关闭了评论