如何将ItemReader与当前的块上下文一起使用?

时间:2016-05-17 11:51:53

标签: java spring spring-batch

我正在尝试为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次迭代中刷新读者,还使用块索引本身吗?

1 个答案:

答案 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/" 来完成非常接近的事情。