所以我正在做一个Spring Boot 项目,我需要插入一些批量数据。但是我想以组的形式插入,比如说每组20个实体,如果出了问题,我希望它回滚组而不是整个项目。我如何实现这一点?
这是我的想法:
@Transactional
public void saveBatchAsGroups(List<EntityClass> data) {
List<EntityClass> group = new ArrayList();
for (EntityClass entity : data) {
//some operations
group.add(entity);
if (group.size() > 19) {
saveGroup(group);
group.clear();
}
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void saveGroup(List<EntityClass> group) {
someRepository.saveAll(group);
}
这样,saveGroup
为每个保存操作打开一个新事务。
这是一个很好的做法,在性能等方面,它可以做到没有一堆新的事务,如保存点或类似的东西?什么是最好的方式来实现这种工作?
1条答案
按热度按时间ukdjmx9f1#
JPA现在不堆叠事务,所以外部的
@Transactional
至少是令人困惑的。除此之外,这看起来还可以。不过你可能要考虑Spring Batch,它是为这种过程构建的。