【发布时间】:2022-01-17 22:30:54
【问题描述】:
我需要使用悲观锁执行批处理操作,以便在此操作期间没有其他人可以读取或写入该行。但是我想在每批之后增加页码,这样如果事务失败或实例死亡,我将从最后一页继续。但是使用下面的代码,在所有批次完成之前它不会更新页面,因此在重新启动作业时,它从 page=0 开始处理。
@Transactional
public void process(long id) {
Entity entity = repo.findById(id);
processBatch(entity);
}
void processBatch(Entity entity) {
int totalPages = otherMicroService.getTotalPages(id);
int lastPage = entity.getPage();
for(int page=lastPage; i<totalPages; i++) {
doOperation();
entity.setPage(page);
repo.save(entity);
}
}
@Lock(LockModeType.PESSIMISTIC_WRITE)
Optional<Entity> findById(int id);
有没有办法在启用 PESSIMISTIC_WRITE 的情况下在每批之后更新页面?
提前致谢。
【问题讨论】:
标签: java spring-boot spring-data-jpa spring-transactions pessimistic-locking