我正在尝试为ItemReader
创建spring-batch
。但是应该在每个chunk
上重新调用读者,并使用chunk参数获取其他数据(这将导致URL的某种分页):
private final RestTemplate tempalte = new RestTemplate();
@Bean
public ItemReader<MyDTO> getReader() {
return tempalte.exchange(url, HttpMethod.GET, headers, currentChunkIndex); //TODO how to?
}
配置为:
@Bean
public Step step() {
return stepBuilder.get("jobname")
.<MyDTO, MyEntity>chunk(100)
.reader(getReader())
.writer(getWriter())
.build(),
}
问题:我可以实现这一点:在每个chunk
次迭代中刷新读者,还使用块索引本身吗?
答案 0 :(得分:0)
Spring Batch框架将继续调用null
,直到该方法返回ItemStream
。您应该遵循的模式是让您的读者实施update
并使用open
方法移动您的分页书签。
在工作期间,您将在阅读器中维护一个跟踪其自身进度的状态变量。如果发生故障,您的ItemStream
方法(也是ExecutionContext
的一部分)会从步骤的ItemStream
获取状态,以便从您上次停下的地方继续。有关StepExecutionListener
的更多信息,请here in the Spring Batch docs。
注意:您也可以通过实施solution "MySolution"
--framework ""
configurations { "Debug","Release" }
platforms { "x32","Universal" }
project "MyProject1"
targetname "MyProject1"
location "MyProject1"
kind "SharedLib"
language "C#"
files { "MyProject1/**.cs" }
excludes { "**/bin/**", "**/obj/**" }
links { "System","System.Core","Microsoft.CSharp","System.Runtime.Serialization","System.ComponentModel.DataAnnotations" }
configuration "Debug"
defines { "TRACE","DEBUG" }
flags { "Symbols" }
targetdir "../../../../../../../deploy/bin/"
configuration "Release"
defines { "TRACE" }
flags { "Optimize" }
targetdir "../../../../../../../deploy/bin/"
来完成非常接近的事情。