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 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料