最近用ssh2做项目遇到了一个问题,项目发布以后,点几下就挂掉了,奇怪的是没有任何异常发生。后来发现只有含有DB操作的请求处于一直等待状态,没有DB操作的请求都正常,由此推断是db操作的原因,然后查找db状态,tomcat关闭后有很多连接释放,由此推断是因为DB操作没有关闭数据库连接导致数据库连接达到一定数量导致DB连接异常,但是使用C3P0连接池管理数据库连接,根本不用特意去关闭数据库连接。
经查看代码发现dao中很多都是直接通过getsession获取session然后执行DB操作,由此推断应该是此类代码影响,把这些代码改成getHibernateTemplate().getSessionFactory().getCurrentSession()以后问题果然解决,推断可能是因为getSession方法获取的session并不是由配置的sessionfactory生成,而C3P0数据库连接池是由SessionFactory管理,导致数据库连接一直处于为连接状态。
留待项目不紧张后有时间查看hibernate源码!
希望有了解的大侠给予说明!