在我的spring boot应用程序中,我试图进行批插入以提高写入性能。问题是,我定期获得重复数据,对于这些数据,我的表上有一些唯一的约束。在进行串行插入时,我只捕获DataIntegrityException并忽略它们。但在执行批插入时,即使一次插入失败,也不会保存整个批。我希望hibernate仍然保存不会抛出错误的记录。我正在使用存储库。saveAll()用于插入,我的数据库是Mysql
那是不可能的。异常发生后,Hibernate的内部结构不再工作。您必须捕获异常,并在新的事务/实体管理器中重试您的操作。
在批处理过程中,您需要添加
.faultTolerant()
.skipPolicy(new AlwaysSkipItemSkipPolicy())
在编写器之后执行的步骤中。例如,在我的步骤中,我这样配置了它
@Bean
public Step step1(){
return steps.get("step1")
.<Product,Product>chunk(3)
.reader(reader(null))
.processor(new ProductProcessor())
.writer(flatFileItemWriter(null))
// .writer(xmlWriter(null))
// .writer(dbWriter())
// .writer(dbWriter2())
.faultTolerant()
.skipPolicy(new AlwaysSkipItemSkipPolicy())
.listener(new ProductSkipListener())
.build();
}
这只能完成一半的工作,因为您还希望在最后看到无法添加的记录。为此,您需要添加侦听器,它基本上实现了如何处理对象尚未写入数据库的情况的逻辑。
我正在尝试读取包含700K条记录的Excel文件,并将这些记录批量插入MySQL数据库表中。 请注意,Excel解析速度很快,我可以在50秒左右的时间内将实体对象放入中。 我使用Spring Boot和Spring数据JPA。 下面是我的部分文件: 以及我的部分: 以下是我的 : 下面是类: 有人能告诉我我在这里做了什么不正确的事情吗? 编辑: 进程未完成并最终抛出错误:- 谢谢
我使用Spring Data、Spring Boot和Hibernate作为JPA提供程序,我想提高批量插入的性能。 我引用这个链接来使用批处理: http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html/ch15.html 这是我的代码和应用程序。插入分批实验的属性。 我的服务: 与批处理相关的部分application.properti
我正在研究一个实时用例,需要使用spring boot JPA将一批消息加载到SQL server表中,将所有模型对象添加到列表中,并对批加载<code>存储库进行此操作。saveAll(list)。由于性能原因,我无法逐个记录插入。我正在寻找以下选项。 是否有任何方法可以读取导致错误的消息并继续将其他记录插入表中。我必须将此错误消息存储在某个地方,并且不应传递给下游应用程序。
问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量
问题内容: 我有一个测试用例,需要将100‘000个实体实例持久存储到数据库中。我当前使用的代码可以做到这一点,但是要花40秒才能将所有数据持久保存在数据库中。从大小约为15 MB的JSON文件中读取数据。 现在,在另一个项目之前,我已经在自定义存储库中实现了批量插入方法。但是,在那种情况下,我要保留许多顶级实体,而只有少数嵌套实体。 在我目前的情况下,我有5个实体,其中包含约30个实体的列表。其
我创建了一个向MySql数据库插入数百万个值的程序。我读到过有关批插入的文章,它将优化我的程序并使其更快,但当我尝试这样做时,它以同样的方式工作。我没有将每个值插入数据库,而是每次将500个值保存在一个列表中,然后将它们插入一个大循环中,如下所示: 然后我删除列表中的所有值,并再次开始收集500个值。它不应该工作得更好吗? 我的插入代码是: 我有一些问题: 1。为什么当我批量插入时它不能更快地工作