如何在Java中死锁或超时后重启事务?

时间:2011-07-11 06:48:18

标签: java mysql jdbc transactions database-deadlocks

当我们得到:

时,如何重新启动一个事务(以便它至少执行一次)
  

(com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:尝试获取锁定时发现死锁;尝试重启事务)或(事务超时)?

我正在使用MySQL(innoDB ENGINE)和Java.Please帮助并链接任何有用的资源或代码。

2 个答案:

答案 0 :(得分:1)

如果使用普通JDBC,则必须在循环中手动完成(并且不要忘记每次都检查前置条件。
如果你使用spring,“How to restart transactions on deadlock/lock-timeout in Spring?”会有所帮助。

答案 1 :(得分:1)

当你在catch块中捕获这种类型的异常时

catch(Exception e){
if(e instanceof TransactionRollbackException){
 //Retrigger Your Transaction
   }
// log your exception or throw it its upto ur implementation
}