某转账业务有 A B C D 四个事务。 需求:AB(必须),CD(可选)。
代码实现如下:
Connection conn = null;
Savepoint savepoint = null; //保存点,记录操作的当前位置,之后可以回滚到指定的位置。(可以回滚一部分)
try{
//1 获得连接
conn = ...;
//2 开启事务
conn.setAutoCommit(false);
A
B
savepoint = conn.setSavepoint(); //保存节点
C
D
//3 提交事务
conn.commit();
} catche() {
if(savepoint != null){ //CD异常
// 回滚到CD之前
conn.rollback(savepoint);
// 提交AB
conn.commit();
} else{ //AB异常
// 回滚AB
conn.rollback();
}
}

本文介绍了一种在转账业务中使用保存点技术来实现部分回滚的方法。通过设置保存点,可以在部分操作失败时仅回滚这部分操作而保留其他成功操作,确保了AB两个核心事务的稳定执行。
1267

被折叠的 条评论
为什么被折叠?



