• 转:Hibernate query.list()之卡住问题


    某个函数里面有调用Query的list()方法,然后它有时会出现这种症状:

     忽然停住不动,但是也没报异常,就是界面死了。

    我的查询差不多是这样:

    Query q=sessionFactory.openSession().createSQLQuery("select * from XEntity where x=x").addEntity(XX.class);

    List resultList=q.list();

    这个sessionFactory是在Spring配置文件里面配好的,用它管理session。

    我调试的时候发现一些特征,如果记录在数据库中没有,List就会停住(这种现象观察到很多次);

    但是后来又观察到其实不一定出现这种情况,有时list也会返回null,所以不是原生SQL查询的问题。

    于是上网搜了很久,中文关键词搜索,见到百度知道中有一个问题跟我一模一样的,但是可惜没人回答,至于其他的问题,也是风马牛不相及,慨叹中文社区不热心之余,查了下英文,估计是关键词不对头,没查到什么有用的东西。

    感觉这下惨了,自己慢慢调---看着各个线程在那里跳来跳去,忽然想到会不会是session的问题,因为在搜索中似乎有见到说session有时会不够用,从而程序可能停止或抛出异常,于是我立马想到我的函数中没有释放session!

    我现在spring配置文件中把数据库连接池的大小调高了很多,发现情况有明显好转,但还会有死掉的情况,于是动手在每个涉及数据库访问的函数中加了session.close(),这下果然可以运行了。

    估计是session没close时,会引用了分配的数据库连接,在一段时间内这个连接时不会释放的,即使是空闲的连接,所以出现了等待的情况。

    困扰了我几个小时的问题终于解决,爽!

  • 相关阅读:
    Codeforces 474B. Worms
    Codeforces 577A
    Codeforces 455A
    Codeforces 540A
    Codeforces 832A. Sasha and Sticks
    51Nod 1137 矩阵乘法
    51Nod 1118 机器人走方格
    Tomcat部署项目的三种方式
    【Linux】CentOS7下安装JDK详细过程
    Linux上安装rz和sz命令
  • 原文地址:https://www.cnblogs.com/ycxyyzw/p/4469087.html
Copyright © 2020-2023  润新知