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 花时间按实体对插入进行分组,从而创建更大的批次。
我有以下代码:
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 花时间按实体对插入进行分组,从而创建更大的批次。