1

要件:
マネージャは、ジョブ インスタンスおよびジョブ実行テーブルにジョブの複数のインスタンスを必要としません。複数の実行は問題ありませんが、彼は 1 つのインスタンスだけを望んでいます。

意味: このようなインスタンスは再起動できないため、ジョブは COMPLETED のバッチ ステータスで終了できません。

私のアプローチ: ジョブの次の実行で以前に実行されたのと同じインスタンスが実行されるように、ジョブを STOPPED のバッチ ステータスで終了しようとします。(ジョブが失敗した場合、失敗したインスタンスは再実行できるため、問題はありません)。実行ごとに作成される既定のインスタンスが、データベース (ジョブ インスタンス テーブル) に既に存在するインスタンスと一致するように、ジョブのパラメーターを持たない予定です。このように、インスタンスは 1 つしかなく、差別化パラメーターがないため、再起動時にジョブにパラメーターを渡すことについて心配する必要はありません。

問題: すべてのステップが完了し、そのようなすべてのステップで BATCH_STEP_EXECUTION が COMPLTED に更新された場合、たとえジョブの実行を STOPPED のステータスで終了させたとしても、この同じジョブ インスタンスを再実行することはできません。メッセージが表示されます: すべてのステップが既に完了しているか、このジョブにステップが構成されていません。

メッセージの意味はわかりますが、単一のインスタンスを再実行するたびに、上記のメッセージが表示されるのではなく、これらのステップも再実行できるように、すべてのステップを完了以外のステータスで終了させようとしています。ステップの実行ステータスを使用して、ジョブの実行ステータスを取得できることを認識しています。たとえば、ステップが STOPPED で終了する場合、そのステータスを使用して、 、 、または 要素を介してジョブを STOPPED で終了するように指示できます。BATCH_STEP_EXECUTION テーブルで更新されたものに影響を与えるような方法がない限り、それらを使用する方法を既に知っているので、これは私が探しているものではありません。

そのテーブルでは、ステップが成功した場合に COMPLETED ではなく STOPPED で終了するようにします。何か案は?そもそもこれを達成することは可能ですか?

4

4 に答える 4

4

ステップ実行ステータスを設定するには -

StepExecution stepExecution = StepSynchronizationManager.getContext().getStepExecution();
stepExecution.setExitStatus("XYZ")

ステップの「終了」の例

<batch:step id="step1">
    <batch:tasklet ref="aaaTasklet"/>
    <batch:end on="END1" />
    <batch:end on="XYZ"/>
    <batch:next on="*" to="step2" />
    <batch:listeners>
        <batch:listener ref="aaaTaskletListener" />
    </batch:listeners>
</batch:step>

<batch:step id="step2">
.
.
.
</batch:step>

バッチスキーマ - http://www.springframework.org/schema/batch/spring-batch-2.2.xsd 検索

<xsd:element name="end">
于 2013-10-25T04:20:24.550 に答える
0

同じ問題がありました。失敗時にジョブを再開したかった。バッチジョブ構成ファイルでフロー決定を行うためにディサイダーを使用しました。

意図的にジョブを失敗/停止し、修正されたデータで再実行すると、失敗した場合に再実行したいステップを再実行せずに、ジョブがディサイダーに直接ジャンプしました。私はそれについて調査を行い、ジョブが失敗/停止した場合でも、同じジョブパラメーターでステップを再実行できないという結論に達しました。Batch Job テーブルでは、Step のステータスは COMPLETED になっています。したがって、春のバッチライフサイクルに従って、ジョブは失敗した時点から開始されます。私の場合、その点が決め手でした。したがって、バッチ ジョブのライフ サイクルを正しく管理するために、ジョブはディサイダーから実行されていました。これがお役に立てば幸いです。

于 2016-09-08T08:41:26.180 に答える