spring-如何在foreach内部提交

8oomwypt  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(237)

我有以下代码:

private void sendList(List<Data> myData) {

  myData.forEach(x -> {
    sendData(x);
  })

}

@Transactional
private void sendData(Data myData){
  //do some changes in myData object and inserts into table
}

目前,它在每个数据对象的插入完成后提交。
但是,我想提交每500条记录。
可以这样做吗?

wqsoz72f

wqsoz72f1#

首先,不需要循环来保存数据。使用 saveAll 相反(这是积垢的力量)。
其次,应该添加批处理。默认情况下,它不会打开。因此,必须向application.properties添加一些参数:

spring.jpa.properties.hibernate.jdbc.batch_size=500
spring.jpa.properties.hibernate.order_inserts=true

第一个属性告诉hibernate批量收集500个插入。这个 order_inserts 属性告诉hibernate花时间按实体对插入进行分组,从而创建更大的批。
来源

相关问题