最近做了一个项目框架是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。
请老师指点,谢谢。
结果发现有个很严重的问题,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。
请老师指点,谢谢。
public void save(Object object) {
try {
getHibernateTemplate().save(object);
} catch (Exception exception) {
logger.error("保存对象发生错误. ", exception);
}
}
保存前面若干个对象是没有问题的,不知道最后做了多少次,就出现了假死现象。
放在tomcat上独立跑,也是如此。正常运行一段时间后,不仅仅这个job假死,连WEB都是假死的,似乎数据库连不上了一样。
代码上真看不出来
帮你顶下吧!会不会是其他原因,比如数据库timeout了,或者数据库的数据量不是很大
mysql吗,如果数据量过大的话,你敢存,他还不一定敢收呢
你说假死什么错误信息都没有么?
就连log都没有么?
发上来看看杂
后面加上session.flush();试试
你再配置文件里面写了么?
如果没做特殊处理应该不是.每次保存完清空下session试试.
谢谢各位啊,问题依然没有解决呢。
但是问题解决了
tks