gpt4 book ai didi

spring-batch - Spring 作业未处理所有记录但退出时状态为 Complete

转载 作者:行者123 更新时间:2023-12-05 07:40:07 25 4
gpt4 key购买 nike

Spring 作业描述:从表中删除记录。将处理大约 500 万条记录。

步骤: block 大小 - 10,000,调用读取器和写入器

Reader:扩展 JpaPagingItemReader 并根据 where 子句从 Oracle 数据库中读取记录。分页大小 - 10,000

JpaItemWriter:扩展 JpaItemWriter 并删除记录。

问题:批处理要处理的记录为 90,000(通过在 SQLDeveloper 中运行读取器查询)。该批处理仅处理 50,000 个。注意没有跳过的记录,批处理成功退出,状态为 Complete,日志中也没有记录任何错误。当批处理再次运行时,另外 20,000 个(在 40,000 个中)得到处理,依此类推...

我不确定为什么会这样。感谢任何帮助。非常感谢。


步骤配置:

@Bean("CleanupSkuProjStep") 
public Step cleanupSkuProjStep()
{
return stepBuilderFactory.get("cleanupSkuProjStep") .<SkuProj, SkuProj>chunk(10000) .reader(cleanupSkuProjReader) .writer(cleanupSkuProjWriter) .listener(cleanupSkuProjChunkListener) .build();
}

阅读器配置:

this.setPageSize(10000);
this.setEntityManagerFactory(entityManagerFactory);
this.setQueryString(sqlString);

Writer 没有配置。

作业配置:

@Bean 
public Job job()
{
log.info("Starting job: CleanupSkuProjJob");
return jobs.get("CleanupSkuProjJob") .listener(jobListener) .incrementer(new RunIdIncrementer()) .start(cleanupSkuProjStep) .build();
}

最佳答案

我遇到了同样的问题。就我而言,一项工作有三个步骤,每个步骤都按照流程​​进行:

读取 -> 转换 -> 写入(到新表) -> 删除(从旧表)

结果,我读取、转换和写入了 100% 的记录,删除了 50% 的记录。

我想这种情况与记录的分页(“迭代”)有关。正如我们所知,我们不能在迭代时从列表中删除对象。我觉得这里有类似的东西。但我不确定 100%

我有很多记录要删除,没有 block 我做不到。我需要它。另一方面,DB的内存每次都被压垮,因为要删除的记录太多了。

我做了什么。我已将之前的流程更改为该流程:

Step1:阅读->转化->写作
Step2:读取->删除
Step3:检查是否还有要删除的记录
a:如果是,转到Step2
b:如果没有,继续

为了检查,我使用了JobExecutionDecider 接口(interface),并返回了带有自定义状态的FlowExecutionStatus.class

我的工作流程是这样的:

return jobBuilderFactory
.get("job-name")
.start(step1')
.next(step2')
.next(step3').on("REPEAT").to(step2').from(step3').on("CONTINUE")
.to(step1'')
.next(step2'')
.next(step3'').on("REPEAT").to(step2'').from(step3').on("CONTINUE")
.end()
.build()
.listener(someListener)
.build();

现在,100% 的记录都被转换、写入和删除。但是 step2 仍然会删除 50% 的记录,但会重复多次直到将它们全部清除

我希望,我帮助过

关于spring-batch - Spring 作业未处理所有记录但退出时状态为 Complete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46471246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com