Hibernate数据库操作出现的怪问题(像假死)

问题描述

最近做了一个项目框架是Spring+Hibernate+Webwork,数据库是MySQL。用到了Quartz。这个job继承QuartzJobBean,直接使用DAO层。 项目每10分钟运行一次,中间有个for循环,循环内部有个DAO的Update操作。 结果发现有个很严重的问题,job正常运行一段时间后,Update操作多次后,某个循环中,程序运到Update操作就不动了,像假死一样。 请求指点,谢谢。JOB中的部分的代码protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { for (int i = 0; i < 1000; i++) { abcDAO.update("update table set a=1"); }}DAO中的代码public class AbcDAO extends HibernateDaoSupport { public void update(String hql) { Session session = null; try { session = (Session) getSession(); if (session.isOpen()) { System.out.println("session is Open"); } if (session.isConnected()) { System.out.println("session is Connected"); } session.createQuery(hql).executeUpdate(); } catch (Exception e) { logger.error("sql操作失败 : " + e.getMessage()); } finally { releaseSession(session); } }}上面代码测试的过程中,在DAO代码第12行处假死的,但是假死之前session is Open和session is Connected。请大家指点,谢谢!问题补充:回答jones:下面是show processlist的结果Id User Host db Command Time State Info 97 root localhost:3803 information_schema Query 0 <NULL> show processlist 99 root localhost:3810 collection Sleep 329 <NULL> 100 root localhost:3817 collection Sleep 170 <NULL> 101 root localhost:3823 collection Sleep 86 <NULL> DEBUG日志看了之后,没有发现什么特别的异常。请问你能帮忙看看是什么原因吗?谢谢你

解决方案

1.假死后用show processlist命令观察mysql情况2.log4j日志级别DEBUG后看hibernate日志停到哪里
解决方案二:
很想看看releaseSession做了哪些事情。貌似没有flush,to jones终结函数是指Object类的finlize方法,不是finally块,finally块不管try块还是catch块有异常抛出来,都会被执行。
解决方案三:
顺便说句,DAO写法有问题,不建议直接操作session,如果必须,最好放到Callback中,在finally中释放session也不建议,见《Effective java》中对finally的论述:“终结函数并不能保证会被及时的执行,从一个对象变得不可到达开始,到终结函数被执行,这段时间的长度是任意的、不确定的”

时间: 2024-09-10 12:21:15

Hibernate数据库操作出现的怪问题(像假死)的相关文章

tomcat每天启动后,晚上无人操作,但第二天铁定假死,线程dump已抓,请各位帮忙分析一下问题所在

问题描述 2014-07-0110:42:45FullthreaddumpJavaHotSpot(TM)64-BitServerVM(20.0-b11mixedmode):"RMITCPConnection(3)-10.238.206.233"daemonprio=6tid=0x00000000082df800nid=0x436crunnable[0x000000001951f000]java.lang.Thread.State:RUNNABLEatjava.net.SocketInp

hibernate一进行数据库操作就发出警报(但是程序运行正常)

问题描述 2009-8-1216:58:38org.hibernate.util.JDBCExceptionReporterlogWarnings警告:SQLWarning:0,SQLState:2009-8-1216:58:38org.hibernate.util.JDBCExceptionReporterlogWarnings警告:[Microsoft][SQLServer2000DriverforJDBC]Databasechangedtoabc2009-8-1216:58:38org.h

Java EE应用中对前端用户的数据库操作的审计

引言 在一些对安全审计有较高要求的系统中,管理员需要查看每个应用程序的登录用户执行了哪些数据库操作,而通常我们应用程序在访问数据库时,都是公用同一个数据库的认证用户去获取数据库连接的,这样我们的登录用户的标识无法传递到数据库端.而很多客户是需要在数据库端能审计登录用户的操作.当然,在应用服务器端的程序里写日志,记录下每个登录用户执行了哪些操作也能达到审计的需求,但这种方式往往会有性能的开销.经过实践,本文介绍的解决途径是将用户标识通过数据库连接传递到数据库端,从而完成在数据库端的审计,这是一种较

java web项目部署之后,运行几天会不正常,登录页面可以打开,但是进行任何数据库操作都会特别卡

问题描述 java web项目部署之后,运行几天会不正常,登录页面可以打开,但是进行任何数据库操作都会特别卡 java web项目部署之后,运行几天会不正常,登录页面可以打开,但是进行任何数据库操作都会特别卡,比如登录. 查了tomcat日志,宕机前只有一个MySQLSyntaxErrorException错误 大神分析一下 还有没有需要提供的东西?? 用的是java,tomcat7,springmvc,spring3.0,hibernate,mysql 解决方案 数据库连接使用完成后有没有关闭

hibernate-java三大框架的问题,数据库操作

问题描述 java三大框架的问题,数据库操作 学的时候用三大框架融合了做,hibernate提供的那四个增删改查方法也够用,现在真正做项目了,那四个方法完全不够用了,要在Java代码里随意的写sql语句,进行数据库的操作,方法有executeQuery.executeUpdate 和 execute,但是这几个方法怎么来的不知道啊,还有大项目的数据库连接一般怎么写 解决方案 ssh中主要用hql语句,hql完全可以应付:_实现类中impl,继承和ibernateDaoSupport然后方法中使用

Hibernate4 (面向对象的数据库操作)

JPA,java persistance api,java持久层接口,即与数据库打交道的一些接口.实现交给各个厂商去实现. ORM,Object/Relation Mapping,对象/关系数据库映射.面向对象的数据库操作,底层仍是sql语句. 获得 hibernate的maven依赖. <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector

封装数据库操作

今天在一本书上面看到了一个封装数据库操作的辅助类,封装了获得数据库的连接.关闭数据库的连接.执行SQLINSERT/UPDATE/DELETE/SELECT 语句的方法. 代码如下: /** * */ package com.sotaof.struts.db.utils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultS

Hibernate数据库对象的创建与导出

Hibernate 与数据库的关系是ORM关系,对象映射数据库. 那么如何通过对象对数据库进行各种对象的ddl与dml操作呢? 数据库对象操作的〈database-object ../〉+ SchemaExport 1.hibernate.cfg.xml <?xml version="1.0" encoding="GBK"?> <!-- 指定Hibernate配置文件的DTD信息 --> <!DOCTYPE hibernate-conf

ORM映射框架总结--数据库操作库(精修版)

1.       ORM数据库操作原理 前面已经介绍过了个人ORM映射框架中的三个核心库: 实体-数据库 映射特性关系: http://www.cnblogs.com/qingyuan/archive/2010/04/02/1702998.html 实体分析器: http://www.cnblogs.com/qingyuan/archive/2010/04/05/1704546.html Sql 语句生成组建: http://www.cnblogs.com/qingyuan/archive/20