2

私はごく最近、SpringBatchを使い始めました。タスクレット内のチャンクの実行回数(つまり、ItemReaderとItemWriteの呼び出し)を制限する方法を教えてもらえますか?

タスクレットに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>

私の期待は、バッチジョブの実行ごとに1回だけタスクレット/チャンクを実行することです。ただし、動作はチャンク(リーダーとライター)が数回/無限に呼び出されることでした。

誰かがこの点で私を助けてくれますか?

4

2 に答える 2

3

チャンクの実行回数は、に依存しreaderます。Spring Batch はそれを制御しません。リーダーがデータベース テーブルから読み取る場合、この制限は SQL ステートメントから返されるレコードの数になります。ファイルから読み取る場合は、行数になります (非常に基本的な場合)。

start-limitこのステップ用に構成されたチャンクではなく、ステップを開始できる回数を制御します。

于 2012-06-20T14:58:11.870 に答える
0

独自のリーダーに 2 つのパラメーターを追加します。

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 に答える