Quartz中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);
}
}
}
上面代码测试的过程中,在红色语句处假死的,但是假死之前session is Open和session is Connected。
请老师指点,谢谢。
------解决方案--------------------饿。。。水平比较低
代码上真看不出来。。。
帮你顶下吧!
会不会是其他原因,比如数据库timeout了,或者数据库的数据量不是很大
mysql吗,如果数据量过大的话,你敢存,他还不一定敢收呢。。。
你说假死。。。什么错误信息都没有么?
就连log都没有么?
发上来看看杂
------解决方案--------------------session.createQuery(hql).executeUpdate();
后面加上session.flush();试试
------解决方案--------------------
------解决方案--------------------spring也是有他的事务的。。。
你再配置文件里面写了么?
------解决方案--------------------
代码上没看出来但是整个job中不能只使用一个session的,不知道你现在是不是一直使用一个session.
如果没做特殊处理应该不是.每次保存完清空下session试试.