我正在使用hibernate,以及innodb和mysql。我在一个非常长的hibernate事务开始时获得了一个悲观锁(在特定的表行上)。有时,当我运行启动此事务并以独立应用程序模式运行在eclipse中并对应用程序执行硬停止(强制线程死亡)的程序时,我有以下场景:
MySQL没有意识到事务已被中止。下一次运行我的应用程序时,获得悲观锁(在长事务开始时)的函数会阻塞,尽管MySQL应该意识到该行是未锁定的。
使事情再次工作的唯一方法是停止MySQL守护进程并重新启动它,然后获得悲观锁。
这真的关系到我。这意味着,除异常或干净关闭之外,任何VM退出都会使MySQL处于中断状态,需要重新启动MySQL守护进程。例如,使用正常的方式关闭和重新启动Tomcat,据我理解,这涉及线程死亡,就像使用eclipse中止正在运行的应用程序一样。
其他人有否遇到这个问题?是否有一种干净的方法来阻止不涉及线程死亡的tomcat?在获得悲观锁(选择更新)的事务中,MySQL不应该对线程死亡免疫吗?
我要用$CATALINA_HOME/bin/shutdown.sh . am来阻止tomcat。
安迪
发布于 2011-02-03 07:29:00
MySQL没有意识到事务已被中止。
我想说的是,您没有等待足够的时间触发事务超时。在任何数据库中(和MySQL,确切地说),您可以指定一个事务超时,如果事务在此之前没有提交,它将回滚事务。
https://stackoverflow.com/questions/4879795
复制相似问题