【发布时间】:2022-02-01 13:02:11
【问题描述】:
我有一个分页 SOAP API,我必须使用 Spring Batch 从中读取数据并处理并将数据写入数据库。
该 API 是一个 SOAP API,它将页码作为输入:<pageNumber>1</pageNumber>
所以我创建了一个 ItemReader 扩展 Spring Batch 提供的 AbstractPagingItemReader 类。
在阅读器内部,我将覆盖 doReadPage() 方法并将 this.getPage() + 1 作为 SOAP API 请求的输入发送。但是每次运行批处理作业时,Reader 只会读取第一页,尽管还有 20 个其他页面可供从 API 读取。
我尝试按照JPAPagingItemReader的结构,使用this.getPage()判断当前页面,进入下一页。
这就是 Step 的样子。
return stepBuilderFactory.get("processData").<InputModel, OutputModel>chunk(5)
.reader(itemReader)
.processor(processor)
.writer(writer)
.build();
这是 Job 的配置方式:
return jobBuilderFactory
.get("chunksJob")
.flow(step1(stepBuilderFactory, itemReader(), itemProcessor(), itemWriter()))
.end()
.build();
我正在按计划运行作业
JobExecution jobExecution = jobLauncher.run(job,
new JobParametersBuilder()
.addString("JOB_ID",
String.valueOf(System.currentTimeMillis())).toJobParameters());
return jobExecution.getExitStatus().toString();
我在这里做错了什么,我可以对此进行哪些更改,以便每个作业执行都从 API 读取所有可用页面。
【问题讨论】:
-
你能提供你的
ItemReader实现吗?
标签: java spring-boot soap spring-batch