前置条件:大事务需要分批提交事务,不然事务超时。
1. 工具类定义,处理异常时手动回滚事务
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.util.function.Supplier;
/**
* 手动事务管理工具类
*/
@Component
public class TransactionUtils {
@Autowired
private PlatformTransactionManager transactionManager;
public <T> T executeInTransaction(Supplier<T> action) {
TransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
T result = action.get();
transactionManager.commit(status);
return result;
} catch (Exception e) {
transactionManager.rollback(status);
throw e;
}
}
}
2. 需要手动提交事务的地方调用工具类,可以再for循环里分批提交
int count =
transactionUtils.executeInTransaction(()->{
return businesscompanionMapper.countQueryBusinesscompanion(businesscompanion);
//无返回值就 return null;
});