我有下一个代码

@Transactional
public void f1() {
    try {
        lock();
        //some logic
    } catch (Exception ex) {
    } finally {
        releaseLock();
    }


@Transactional(propagation = Propagation.REQUIRES_NEW)
public void lock() {
     repository.doLock();
   }


@Transactional(propagation = Propagation.REQUIRES_NEW)
public void releaseLock() {
         repository.doReleaseLock();
    }


我想要下一个行为:如果某些逻辑锁出了问题,将被释放。
在调试和日志中,我看到了非常奇怪的行为。
代码工作流永远不会最终访问。

因此,我的问题是:如果其中一个失败,则如何正确地使该代码具有3个完全回滚的事务?

最佳答案

简单的答案,您的代码应仅保留(带有throws语句):

 @Transactional
 public void f1() {
    //some logic
 }

09-11 19:16