私の要件は、データベースからデータを読み込み、それをバイトに変換し、Blob列の別のデータベース(Oracle)にストリームすることです。Spring Batchアプリケーションでバイナリ(Blob)データを処理する方法
Oracleでは、Blob列にストリームするためにJDBC自動コミットを無効にし、終了時にConnection#Commitを呼び出す必要があります。
私は現在3つのステップを持っています。
ステップ1(タスクレット): これには2つのSQLクエリがあります。二つ目は、私はまた、自動コミット
ステップ2(チャック) を無効にするために、データソースからの接続オブジェクトを取得BLOBロケータ(SELECT payload AS payload FROM DATABASEUSER.TABLENAME WHERE PrimaryKey = ? FOR UPDATE
)
を返すカラム(UPDATE DATABASEUSER.TABLENAME SET payload = empty_blob() WHERE PrimaryKey= ?
)
を初期化する一つの私は一般的な方法でソースDBからデータを読み込むIteamReaderと、行をCSV形式にバイト単位で変換するProcessorを持っています。次に、Blob列にデータをストリーミングするカスタムItemWriterがあります。
手順3(タスクレット) これは、クリーンアップして接続をコミットするときです。
質問1:これは正しい戦略ですか?私はちょっとわかりませんので、どんな方向にも感謝します
いいえ。ステップ間でトランザクションを保持することはできません。各ステップはそれぞれ独自にコミットする必要があります。 –
@DeanClark私はそれを解決しました、ありがとう。 –