如何在Spring Batch应用程序中处理二进制(Blob)数据

时间:2017-05-23 15:43:14

标签: oracle jdbc spring-boot spring-batch spring-transactions

我的要求是从数据库中读取数据并将其转换为字节,然后将其流式传输到Blob列中的另一个数据库(Oracle)。

Oracle要求禁用JDBC自动提交以流式传输到Blob列,并在完成时调用Connection#Commit。

我目前有3个步骤。

第1步(Tasklet): 它有两个SQL查询。一个用于初始化列(UPDATE DATABASEUSER.TABLENAME SET payload = empty_blob() WHERE PrimaryKey= ?

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

我还从数据源获取连接对象以禁用自动提交

第2步(查克) 我有一个IteamReader,它以通用方式从源DB读取数据,还有一个处理器,它将行转换为CSV格式,但以字节为单位。然后我有一个Custom ItemWriter来将数据流式传输到Blob列。

第3步(Tasklet) 这是我清理并提交连接的时候。

问题1:这是正确的策略吗?欣赏任何方向,因为我有点不确定

1 个答案:

答案 0 :(得分:0)

我解决了。

我在所有步骤中都使用了ResourcelessTransactionManager事务管理器。在步骤1中,我从数据源获得连接,禁用自动提交并在最后一步调用commit。我在所有步骤中使用相同的连接。