iteye_8144 2014-05-21 14:37
浏览 306
已采纳

SSH项目数据库连接的问题

项目用ssh整合的,连接池一直有问题,最开始用的dbcp连接池,数据库连接几天就把数据库的连接都给占光了,后面换了c3p0,结果还是不行
[code="java"]An SQLException was provoked by the following failure: com.mchange.v2.resourcepool.ResourcePoolException: Attempted to use a closed or broken resource pool[/code]

  • 写回答

9条回答 默认 最新

  • crespo1985ban 2014-05-21 15:39
    关注

    先谢谢题主私信我。

    这个问题我以前遇到过:其实准确的说不是连接池的问题。
    先说下我的经验(用教训可能更合适),不一定适合题主,供参考。

    集成SSH的项目中,会在dao层用到[b]getSession()[/b]方法来操作数据库记录,还有个方法[b]getHibernateTemplate()[/b],这两个方法其实是有区别的:
    1、使用getSession()方法你只要继承sessionFactory就行,使用getHibernateTemplate()方法必须继承 HibernateDaoSupport,这点区别都不是特别重要的;
    2、getSession()方法是没有经过spring包装的,spring会把最原始的session给你,在[b]使用完之后必须自己调用相应的close方法[/b],而且也不会对声明式事务进行相应的管理,一旦没有及时关闭连接,就会导致数据库连接池的连接数溢出;getHibernateTemplate()方法是经过spring封装的,例如添加相应的声明式事务管理,由spring管理相应的连接

    我当时自己检查了dao层的代码,发现确实有很多使用session方式的DAO在最后没有关闭。
    后来通过基类将获取session的方式统一了一下,问题就解决了。我觉得这才是根本的问题。

    总结一下:
    1、使用session实现DAO,必须要在最后关闭session,不然会导致连接池链接溢出
    2、希望题主也自己看看代码,看是否存在同样的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!