2012-06-20 55 views
1

我最近开始使用spring批处理。任何机构可以告诉我如何限制一个小块的执行no(即调用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。但行为是大块(读者和作者)被调用几次/无限。

有人可以帮助我在这方面请。

回答

3

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

start-limit控制可以开始步骤的次数,而不是为此步​​骤配置的块。

+0

谢谢Serkan。我试试看。 – dharshan

+0

@dharshan你解决了吗?类似的情况,我想控制读者每个作业实例读取一行。 – Saad

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作为值