Spring - 如何在 forEach 中提交

Spring - How to commit inside forEach

我有以下代码:

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 条记录提交一次。

可以这样做吗?

首先,你不需要循环来保存数据。请改用 saveAll。 (这就是 crud 的力量)。

其次,您应该添加批处理。默认情况下它没有打开。因此,您必须向 application.properties:

添加一些参数
spring.jpa.properties.hibernate.jdbc.batch_size=500
spring.jpa.properties.hibernate.order_inserts=true

第一个 属性 告诉 Hibernate 以 500 个为一组收集插入。order_inserts 属性 告诉 Hibernate 花时间按实体对插入进行分组,从而创建更大的批次。

Source