イージーバッチライターの役割は、シンクにレコードを書き込むことです
サポートされるデータシンク
- 図2を参照して
公式のフォームから
注意とヒント
- JdbcRecordWriterでデータベーストランザクションを処理します。各バッチの後に、トランザクションが作成され、コミット/ロールバックされます。
- JpaRecordWriterは、レコードではなくJavaオブジェクトを入力として想定しています。レコードを渡す前に、レコードをドメインオブジェクトタイプのJpaRecordWriterに必ずマップしてください。JpaRecordWriterでデータベーストランザクションを処理します。各バッチの後に、トランザクションが作成され、コミット/ロールバックされます。
- HibernateRecordWriterは、レコードではなくJavaオブジェクトを入力として想定しています。レコードを渡す前に、そのレコードをドメインオブジェクトタイプのHibernateRecordWriterに必ずマップしてください。作成者はデータベーストランザクションを処理します。各バッチの後に、トランザクションが作成され、コミット/ロールバックされます。
データ書き込みエラーの処理
場合によっては、データレシーバーが一時的に使用できないことがあります。この場合、レコードライターはデータを書き込むことができず、ジョブは中止されます。RetryableRecordWriterを使用すると、デリゲート再試行RecordWriterを使用してデータをRetryPolicyに書き込むことができます。
ジョブジョブ= 新しいJobBuilder()
。ライター(新しいRetryableRecordWriter(unreliableDataSinkWriter、新しいRetryPolicy(5、1、SECONDS)))
。build();
これにより、ライターは最大5回再試行し、各試行の間に1秒待機します。5回試行してもデータレシーバーにアクセスできない場合、ジョブは中止されます。
バッチスキャン
アクティブ化後、バッチ書き込みプロセス中に例外が発生すると、バッチスキャンが開始されます。レコードをシングルトンとして1つずつ書き込むようにしてください。このようにして、最初の失敗したバッチでジョブ全体を失敗させるのではなく、誤ったレコードをスキップしてジョブを実行し続けることができます。
この機能はトランザクションライターと組み合わせて使用され、失敗した書き込み操作を副作用なく正常に実行します。ただし、既知の制限として、非トランザクションライターで使用すると、アイテムが2回書き込まれることがあります(たとえば、ファイルライターの場合、例外が発生する前に出力ストリームが更新されます)。これを回避するには、BatchListener#onBatchWritingExceptionメソッドで手動のロールバック操作を実行する必要があります。