JPA 批量操作性能优化配置

JPA 批量操作性能优化配置

规则说明

本项目使用 Spring Data JPA 进行数据库操作,为提升批量插入和更新的性能,需要启用 Hibernate 的批处理功能。

配置项

以下配置应添加到 application.properties 文件中:

properties 复制代码
# ========== JPA 批量操作性能优化 ==========

# 批量插入时每次批量的大小(默认30)
spring.jpa.properties.hibernate.jdbc.batch_size=1000

# 强制按插入顺序执行更新
spring.jpa.properties.hibernate.order_updates=true

# 对插入语句进行排序,提高批处理效率
spring.jpa.properties.hibernate.jdbc.order_inserts=true

配置说明

配置项 建议值 说明
hibernate.jdbc.batch_size 1000 每次批量插入/更新的记录数。值越大,内存占用越高,但批量效率更高
hibernate.order_updates true 强制按插入顺序执行更新,防止并发更新导致的数据不一致
hibernate.order_inserts true 对插入语句进行排序,提高批处理效率

应用范围

此配置适用于以下场景:

  1. 批量插入 - 一次插入多条记录(如批量创建用户消息、合同审批节点等)
  2. 批量更新 - 一次更新多条记录(如批量删除消息、更新审批状态等)
  3. 大数据量操作 - 处理大量数据时的性能优化

注意事项

  1. 内存占用

    • batch_size 设置过大会增加内存占用
    • 建议根据实际数据量和服务器内存情况调整
  2. 事务边界

    • 批量操作应在同一事务内完成
    • 使用 @Transactional 注解确保事务一致性
  3. 测试验证

    • 修改配置后,测试批量操作的执行结果
    • 确认数据正确性和性能提升

相关业务场景

合同审批流程创建

java 复制代码
// 批量创建审批节点
List<ContractWorkFlow> workFlowNodes = new ArrayList<>();
// ... 添加节点
contractWorkFlowMapper.saveAll(workFlowNodes);  // 使用批量插入

消息批量删除

java 复制代码
// 批量删除审批消息
List<Message> messages = messageMapper.findByBizIdAndIsDeleted(...);
for (Message message : messages) {
    message.setIsDeleted(StatusEnum.Del.getStatus());
    // ...
}
messageMapper.saveAll(messages);  // 使用批量更新

性能对比

场景 未启用批量 启用批量(batch_size=1000)
插入1000条记录 ~5000-10000ms ~1000-2000ms
更新1000条记录 ~3000-8000ms ~3000-600ms

参考链接

相关推荐
想你依然心痛13 小时前
地图瓦片原理深度解析:切片、加载、缓存机制详解
性能优化·离线地图·金字塔模型·缓存机制·地图瓦片·切片规则·瓦片加载
数据库小学妹15 小时前
MySQL联合索引失效怎么解决?从key_len逆向分析
数据库·mysql·性能优化·索引失效·联合索引·最左前缀·keylen
一只叫煤球的猫16 小时前
ThreadForge 源码解读三:从任务执行到并发编排,ScopeJoiner 是怎么工作的?
后端·性能优化·开源
做前端的娜娜子20 小时前
如何实现网页加载进度条?
性能优化·掘金·金石计划
小孔龙20 小时前
Android GPU 渲染管线:一帧画面如何走上屏幕
android·性能优化·gpu
ZENERGY-众壹20 小时前
延时 5 秒怎么调优:光伏 SCADA 实时画面与 WebGL 拓扑集成的性能复盘
性能优化·webgl·scada·光伏运维·api集成
xx240620 小时前
前端性能优化笔记
前端·笔记·性能优化
乐启国际旅行社有限公司21 小时前
Java线程池实战:文旅系统批量任务性能优化(团期生成/数据导出)
java·开发语言·性能优化
爱喝水的鱼丶2 天前
SAP-ABAP:SELECT大数据量查询性能调优——避免嵌套循环、减少数据库交互的核心方案
开发语言·数据库·sql·性能优化·sap·abap·erp
Revolution612 天前
首屏变慢后,应该先查资源下载、脚本执行还是接口请求
前端·性能优化·前端工程化