Reputation: 763
I started to use spring batch very recently. Can any body tell me how to limit the no of execution of a chunk (i.e. invocation of ItemReader and ItemWrite) within a tasklet.
I set the allow-start-if-complete="false", start-limit="1" in the tasklet. Then I set commit-interval="1" in the chunk.
<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>
My expectation is to run the tasklet/chunk only once for every batch job execution. But the behavior was the chunk(reader and writer) gets invoked several times/infinite.
Can anybody help me on this regards please.
Upvotes: 3
Views: 9863
Reputation: 1259
add two parameters in your own reader:
private static int numberOfReading=0;
@Value("${batch.maxNumberOfReading}")
private int maxNumberOfReading;
and in the read method use this variable in order to control the flow:
if(numberOfReading<maxNumberOfReading){
// do what do yoou have to do
numberOfReading++;
// return the result to the writer
}
return null;
batch.maxNumberOfReading is setted in the property file, with 1 as value
Upvotes: 0
Reputation: 5619
Number of executions of a chunk depends on the reader
; Spring Batch does not control it.
If your reader reads from a database table, this limit will be the number of records returned from your SQL statement, or if it reads from a file it will be the number of lines (in the very basic cases)
start-limit
controls the number of times a Step may be started, not the chunk configured for this step.
Upvotes: 3