如何为批量插入配置spring boot和data jpa

Posted

技术标签:

【中文标题】如何为批量插入配置spring boot和data jpa【英文标题】:how to configure spring boot and data jpa for batch insert 【发布时间】:2018-07-08 03:38:55 【问题描述】:

我正在使用 spring boot 和 spring data jpa with hibernate,japrepository.save(List) 花了 20 分钟将 8000 条记录保存到 oracle 数据库。有人可以帮我解决它。在 application.properties 中添加 spring.jpa.properties.hibernate.jdbc.batch_size=1000 也没有帮助。

应用程序属性

server.servlet-path = /*         
spring.datasource.jndi-name=jdbc/mydatasource       
spring.datasource.testWhileIdle = true         
spring.datasource.validationQuery = SELECT 1 
spring.jpa.database-platform=org.hibernate.dialect.Oracle10g‌​Dialect 
spring.jpa.properties.hibernate.jdbc.batch_size=1000                                        

【问题讨论】:

您是否使用 GeneratedValue 生成主键?如果是的话,什么策略 @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ubseq") @SequenceGenerator(sequenceName = "OWNER.ub_seq", schema = "OWNER", allocationSize = 1, name = "ubseq" ") 私人长ID; 问题可能出在 Sequence 的 allocationSize 上,因为每次插入都会获得一个新的序列号,这是一项昂贵的操作。将其设置为 1 是否有原因? 没有具体原因,其实我对Spring/Hibernate框架不是很熟悉。我需要序列中的主键值,或者如果您可以建议其他方法,请尝试。 太好了,我刚刚从 SequenceGenerator 中删除了 'allocationSize = 1' 属性,所有 8000 条记录都在 1 分钟内保存了下来。最初我认为它就像加一一样。现在我的代码在 Tomcat 中运行,我需要将它实际部署在 JBoss 上,让我们看看它是如何工作的。非常感谢 Simon Martinelli :) 【参考方案1】:

问题可能出在 Sequence 的 allocationSize 上,因为每次插入都会获得一个新的序列号,这是一项昂贵的操作。

如果您可以将 allocationSize 设置为适合您的情况的更高值。

【讨论】:

【参考方案2】:

尝试使用合理的 batch_size,比如 50 或 30。除此之外,尝试设置参数

spring.jpa.hibernate.order_inserts=true spring.jpa.hibernate.order_updates=true

所以插入和更新是在发送到数据库之前排序的。也看这里Spring Boot JPA Bulk insert或https://memorynotfound.com/hibernate-jpa-batch-insert-batch-update-example/

更多示例和详细信息。

【讨论】:

我尝试添加 spring.jpa.properties.hibernate.jdbc.batch_size=100 spring.jpa.hibernate.order_inserts=true spring.jpa.hibernate.order_updates=true 单独没有解决问题但是这些配置还需要从 SequenceGenerator 中删除“分配大小”。谢谢弗朗西斯科

以上是关于如何为批量插入配置spring boot和data jpa的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 集成 Druid 批量插入数据和效率监控配置

如何为 Spring Boot 应用程序外部化 data.sql

Spring Boot 集成 Druid 批量插入数据和效率监控配置

Spring Boot 集成 Druid 批量插入数据和效率监控配置

如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试

如何为JSP配置spring boot mvc app?