我的 web 应用程序代码是用 java、swing、hibernate 组合编写的,在 tomcat5 中运行。在某些情况下,一个表在更新/删除时被锁定,一段时间后无法自行解锁[错误是:mysql lock wait timeout exceeded, try restarting transaction],导致应用程序无法访问。
我必须编写一个 java 调度程序,它会定期检查锁定状态,并在指定时间后说 30 秒解锁表。
具体来说,我想知道如何检查表是否被锁定?以及如何解锁它?
谢谢
您可以使用GET_LOCK
非常低的超时来检查是否存在锁。如果返回码是 0 另一个线程有锁,否则你得到 1 并且你的线程有锁。
至于如何解锁,这就有点难了。持有锁的可能是一个完全不同的应用程序,并且持有它可能是有充分理由的。不知道能不能强行破解。但我不认为你真的想这样做。