同步数据需要分批操作,每次同步1000条,都需要提交事务
@Service public class MyService { @Autowired private 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 的事务是通过代理实现的。 -
循环调用事务方法
每次循环插入时,都会创建一个新事务并提交,确保单次插入操作失败不会影响其他操作。