我的要求是从数据库中读取数据并将其转换为字节,然后将其流式传输到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:这是正确的策略吗?欣赏任何方向,因为我有点不确定
答案 0 :(得分:0)
我解决了。
我在所有步骤中都使用了ResourcelessTransactionManager事务管理器。在步骤1中,我从数据源获得连接,禁用自动提交并在最后一步调用commit。我在所有步骤中使用相同的连接。