2017-05-23 148 views
2

我的要求是從數據庫中讀取數據聚合並轉換爲字節,然後將數據流傳輸到Blob列中的另一個數據庫(Oracle)。如何在Spring批處理應用程序中處理二進制(Blob)數據

Oracle需要禁用JDBC自動提交以流式傳輸到Blob列並在完成時調用Connection#Commit。

我目前有3個步驟。 (步驟): 它有兩個SQL查詢。一個用來初始化柱(UPDATE DATABASEUSER.TABLENAME SET payload = empty_blob() WHERE PrimaryKey= ?

第二個返回blob定位器(SELECT payload AS payload FROM DATABASEUSER.TABLENAME WHERE PrimaryKey = ? FOR UPDATE

我還從數據源獲取的連接對象來禁用自動提交

步驟2(卡盤) 我有一個IteamReader以通用的方式從源數據庫讀取數據,以及一個處理器,它將行轉換爲CSV格式,但以字節爲單位。然後我有一個Custom ItemWriter將數據流式傳輸到Blob列。

第3步(小工具) 這是當我清理並提交連接。

問題1:這是正確的策略嗎?欣賞任何方向,因爲我有點不確定

+0

不可以。您不能跨越多個步驟進行交易。每一步都必須自行完成。 –

+0

@DeanClark我解決了它,謝謝。 –

回答

0

我解決了它。

我在我所有的步驟中都使用了ResourcelessTransactionManager事務管理器。在第1步中,我從數據源獲得一個連接,在最後一步禁用自動提交和調用提交。我在所有步驟中使用相同的連接。