【问题标题】:What is the maximum amount of records can jparespositry saveAll can handle at a time?jparespositry saveAll 一次可以处理的最大记录数是多少?
【发布时间】:2020-01-02 16:44:40
【问题描述】:

在我的 spring-boot 应用程序中,我正在运行一个计划作业,该作业从一个表中获取记录并将其另存为存档,我只是遇到了一个问题,所以现在我选择保存的记录几乎是 400,000另外,当工作正在执行时,它会继续进行。 ja 可以一次处理这么多要保存的数据吗?下面是我的配置和方法。

#--Additional Settings for Batch Processing --#
spring.jpa.properties.hibernate.jdbc.batch_size=5000
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.jdbc.batch_versioned_data = true
rewriteBatchedStatements=true
cachePrepStmts=true

agentAuditTrailArchiveList 对象的大小为 400,000 以上。

private void archiveAgentAuditTrail(int archiveTimePeriod) {
    List<AgentAuditTrail> archivableAgentAuditTrails = agentAuditTrailRepository
        .fecthArchivableData(LocalDateTime.now().minusDays(archiveTimePeriod));
    List<AgentAuditTrailArchive> agentAuditTrailArchiveList = new ArrayList<>();

    archivableAgentAuditTrails
        .forEach(agentAuditTrail -> agentAuditTrailArchiveMapper(agentAuditTrailArchiveList, agentAuditTrail));
    System.out.println(" agentAuditTrailArchiveList = " + agentAuditTrailArchiveList.size());
    System.out.println("archivableAgentAuditTrails = " + archivableAgentAuditTrails.size());
    agentAuditTrailArchiveRepository.saveAll(agentAuditTrailArchiveList);

    agentAuditTrailRepository.deleteInBatch(archivableAgentAuditTrails);
    }

【问题讨论】:

    标签: database spring-boot spring-data-jpa spring-data spring-batch


    【解决方案1】:

    假设您实际上是作为 Spring Batch 作业执行此操作,这已被处理。您只需要在批处理作业步骤配置中设置块大小,以便它一次只处理一组记录。请参阅下面的批处理步骤配置示例。

    你永远不想尝试将整个工作作为一个提交来完成,除非它总是非常小。在一次提交中完成所有操作会使您面临失败条件和数据完整性问题的美誉列表。

    @Bean
    public Step someStepInMyProcess(FlatFileItemReader<MyDataObject> reader,
            MyProcesssor processor, ItemWriter<MyDataObject> writer) {
        return stepBuilders.get("SomeStepName")
                .<MyDataObject, MyDataObject>chunk(50)
                .reader( reader )
                .processor( processor )
                .writer(writer)
                .transactionManager(transactionManager)
                .build();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-03
      • 2016-07-30
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多