【问题标题】:How to restart transaction after deadlocked or timed out in Java ?Java中死锁或超时后如何重新启动事务?
【发布时间】:2011-10-02 13:30:57
【问题描述】:

当我们得到时如何重启一个事务(使其至少执行一次):

(com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException:Deadlock found when trying to get lock; Try restarting transaction) OR (transaction timeout)?

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

【问题讨论】:

    标签: java mysql jdbc transactions database-deadlocks


    【解决方案1】:

    如果您使用普通 JDBC,则必须手动循环执行(并且不要忘记每次都检查前置条件。
    如果您使用 spring,请“How to restart transactions on deadlock/lock-timeout in Spring?”寻求帮助。

    【讨论】:

    • 您好,感谢您的回复。我使用的是普通 JDBC。您能否提供一个示例代码,例如 for() { transaction } 来检查前置条件。
    【解决方案2】:

    当您在 catch 块中捕获此类异常时

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

    【讨论】:

    • 您确定这是特定于死锁的吗?如果除了死锁之外的任何事情都会抛出TransactionRollbackException,我不想陷入无限循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2011-01-20
    • 1970-01-01
    • 2013-06-29
    • 2014-08-14
    相关资源
    最近更新 更多