問題タブ [spring-batch-tasklet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
23 参照

spring-boot - Springboot+Job フレームワーク

私の要件は、UI/Postman から特定の RestAPI を呼び出すたびに、バックエンドで複数の操作/タスクを実行する JOB をトリガーする必要があることです。例: いくつかの POST Rest API が呼び出されたと仮定します - 「Identify-JOB」を呼び出す必要があります (いくつかのアクティビティを実行します)- 特定の条件に基づいて、PLANA-JOB または PLANB-JOB を呼び出す必要があります 1> PLANA-JOB が呼び出されたとします。この JOB が成功すると、「finish-JOB」と呼ばれる別の JOB がトリガーされます。失敗した場合、別のジョブ「finish-JOB」を呼び出すべきではありません

どうすればこれを行うことができますか?

0 投票する
1 に答える
157 参照

spring-batch - トランザクション境界内のジョブ全体をSpringでバッチ処理

次の方法で設計できる春のバッチジョブを使用できるユースケースがあります。

1) 最初の方法:

Step1 (チャンク指向のステップ): ファイルから読み込む —> 読み取った行をフィルタリング、検証、および DTO (データ転送オブジェクト) に変換します。エラーがあれば、DTO 自体にエラーを格納します。DTO のいずれかにエラーがあるかどうかを確認し、そうでない場合はデータベースに書き込みます。ある場合は、エラー ファイルに書き込みます。

ただし、この方法の問題は、トランザクション境界でこの JOB 全体が必要なことです。したがって、いずれかのチャンクでエラーが発生した場合、DB に書き込みたくなく、DB のその時点まで成功したすべての書き込みをロールバックしたいと考えています。上記の方法では、いずれかのチャンクでエラーが発生した場合、成功したすべての書き込みに対してロールバック ロジックを作成する必要があります。

2) 第二の方法

ステップ 1 (チャンク指向のステップ): ファイルからアイテムを読み取る —> 読み取った行を DTO (データ転送オブジェクト) でフィルター処理、検証、および変換します。これにより、DTO オブジェクト自体にエラーが格納されます。

ステップ 2 (タスクレット): ステップ 1 で作成された DTO のリスト全体 (チャンクではなく) を読み取ります —> DTO にエラーが入力されているかどうかを確認します。はいの場合、DB への書き込みを中止し、JOB を失敗させます。

2 番目の方法では、チャンク処理とスケーリングのすべての利点を得ることができます。同時に、ジョブ全体のトランザクション境界を作成しました。

PS :どちらの方法でも、最初のステップで失敗があったとしても、ステップの失敗はありません。エラーは DTO オブジェクト自体に格納されます。したがって、DTO オブジェクトは常に作成されます。

質問は-私はSpringバッチが初めてなので、2番目の方法で行くのは良いパターンですか. また、ステップ間でデータを共有して、DTO のリスト全体を 2 番目のステップで使用できるようにする方法はありますか (上記の 2 番目の方法)。