同步数据需要分批操作,每次同步1000条,都需要提交事务
@Service public class MyService {@Autowiredprivate MyService self; // 注意使用自身代理对象来触发事务// 循环调用此方法@Transactional(propagation = Propagation.REQUIRES_NEW)public void insertData(Object data) {// 插入数据库的具体逻辑 myMapper.insert(data);}public void batchInsert(List<Object> dataList) {for (Object data : dataList) {self.insertData(data); // 通过代理对象调用,确保事务生效 }} }
-
@Transactional(propagation = Propagation.REQUIRES_NEW)
每次调用insertData
方法都会开启一个新的事务,并独立提交。 -
self.insertData(data)
必须通过代理对象调用事务方法。如果直接调用this.insertData(data)
,事务不会生效,因为 Spring 的事务是通过代理实现的。 -
循环调用事务方法
每次循环插入时,都会创建一个新事务并提交,确保单次插入操作失败不会影响其他操作。