mysql事务悲观锁已损坏

时间:2011-02-02 20:59:38

标签: mysql hibernate tomcat transactions pessimistic-locking

我正在使用hibernate,以及innodb和mysql。我在一个非常长的hibernate事务开始时获得了一个悲观的锁(在特定的表行上)。有时候,当我运行启动此事务的程序并在独立应用程序模式下运行eclipse并对应用程序进行硬停止(强制执行线程死亡)时,我有以下情况:

MySQL没有意识到事务已中止。下次运行我的应用程序时,获取悲观锁(在该长事务开始时)的函数会阻塞,即使MySQL应该意识到该行已解锁。

让事情再次发挥作用的唯一方法是停止MySQL守护进程并重新启动它,然后获得悲观锁定。

这真的让我感到担忧。这意味着除异常或干净关闭之外的任何VM退出都可能使MySQL处于需要重新启动MySQL守护程序的损坏状态。例如,正在使用正常方式关闭并重新启动Tomcat,在我的理解中涉及一个线程死亡,就像使用eclipse中止正在运行的应用程序一样。

有其他人遇到过这个问题吗?是否有一种干净的方法来阻止不涉及线程死亡的tomcat? MySQL是否应该在已经获得悲观锁定(选择更新)的事务中间对threaddeath免疫?

我用$ CATALINA_HOME / bin / shutdown.sh

停止tomcat

安迪

1 个答案:

答案 0 :(得分:0)

  

MySQL没有意识到事务已中止。

我会说你没等到足以触发事务超时。在任何数据库(以及MySQL中,某些数据库)中,您可以指定一个事务超时,如果事务未在此之前提交,它将回滚该事务。