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

参考链接

相关推荐
heimeiyingwang2 小时前
【无标题】
网络·缓存·docker·性能优化·架构
qq_12084093715 小时前
Three.js 场景性能优化实战:首屏、帧率与内存的工程化治理
开发语言·javascript·性能优化·three.js
MU在掘金916956 小时前
给Perfetto trace装上GPS:我设计了一套源码级性能归因系统
性能优化
|晴 天|6 小时前
我的博客性能优化实战:首屏加载从2.5s降到1.2s
性能优化
heimeiyingwang7 小时前
【架构实战】接口性能优化:异步化/并行化/缓存化
缓存·性能优化·架构
墨香幽梦客8 小时前
全站HTTPS化实战:SSL证书管理、自动续期与TLS 1.3性能优化详解
性能优化·https·ssl
喜欢流萤吖~8 小时前
SpringBoot 性能优化实战
spring boot·后端·性能优化
weixin199701080161 天前
《TikTok 商品详情页前端性能优化实战》
前端·性能优化
comerzhang6551 天前
开启 Cross-Origin Isolation 后,我的网站"社会性死亡"了
性能优化·next.js