2

我最近开始使用 Spring Batch。任何人都可以告诉我如何限制 tasklet 中块的执行次数(即 ItemReader 和 ItemWrite 的调用)。

我在 tasklet 中设置了 allow-start-if-complete="false", start-limit="1"。然后我在块中设置 commit-interval="1" 。

<batch:step id="mig-chain-data">
<batch:tasklet allow-start-if-complete="false" start-limit="1">
<batch:chunk commit-interval="1" reader="reader" writer="writer"></batch:chunk>
</batch:tasklet>
</batch:step>

我的期望是每次执行批处理作业时只运行一次 tasklet/chunk。但行为是块(读取器和写入器)被多次调用/无限。

任何人都可以在这方面帮助我。

4

2 回答 2

3

块的执行次数取决于reader; Spring Batch 不控制它。如果您的阅读器从数据库表中读取,此限制将是从您的 SQL 语句返回的记录数,或者如果它从文件中读取,它将是行数(在非常基本的情况下)

start-limit控制一个步骤可以启动的次数,而不是为这个步骤配置的块。

于 2012-06-20T14:58:11.870 回答
0

在您自己的阅读器中添加两个参数:

private static int numberOfReading=0;
@Value("${batch.maxNumberOfReading}")
private int maxNumberOfReading;

并在 read 方法中使用此变量来控制流程:

if(numberOfReading<maxNumberOfReading){

   // do what do yoou have to do

   numberOfReading++;

   // return the result to the writer
}
return null;

属性文件中设置了 batch.maxNumberOfReading,值为 1

于 2014-05-29T15:32:13.120 回答