簡體   English   中英

春批。 如何限制塊的執行次數

[英]Spring Batch. How to limit the no of executions of a chunk

我最近開始使用彈簧批。 任何正文都可以告訴我如何在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。 但是行為是塊(讀者和作者)被多次/無限地調用。

請有人幫我解決這個問題。

塊的執行次數取決於reader ; Spring Batch無法控制它。 如果您的讀者從數據庫表中讀取,則此限制將是從SQL語句返回的記錄數,或者如果它從文件中讀取它將是行數(在非常基本的情況下)

start-limit控制Step可以啟動的次數,而不是為此步​​驟配置的chunk。

在您自己的閱讀器中添加兩個參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM