我有下一个代码
@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
}