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

Oracle 如何在Spring批处理应用程序中处理二进制(Blob)数据,oracle,jdbc,spring-boot,spring-batch,spring-transactions,Oracle,Jdbc,Spring Boot,Spring Batch,Spring Transactions,我的要求是从数据库中读取数据,将其聚合并转换为字节,然后将其流式传输到Blob列中的另一个数据库Oracle Oracle需要禁用JDBC自动提交以流式传输到Blob列,并在完成时调用ConnectionCommit 我目前有3个步骤 步骤1任务: 它有两个SQL查询。一个用于初始化列updatedatabaseuser.TABLENAME SET payload=empty\u blob,其中PrimaryKey= 第二个返回Blob定位器SELECT payload作为DATABASEUSE

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

Oracle需要禁用JDBC自动提交以流式传输到Blob列,并在完成时调用ConnectionCommit

我目前有3个步骤

步骤1任务: 它有两个SQL查询。一个用于初始化列updatedatabaseuser.TABLENAME SET payload=empty\u blob,其中PrimaryKey=

第二个返回Blob定位器SELECT payload作为DATABASEUSER.TABLENAME中的有效负载,其中PrimaryKey=?更新

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

步骤2查克 我有一个IteamReader,它以一种通用的方式从源数据库读取数据,还有一个处理器,它将行转换为CSV格式,但以字节为单位。然后,我有一个自定义ItemWriter将数据流传输到Blob列

步骤3Tasklet 这是我清理和提交连接的时候

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

我解决了它


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

否。您不能跨步骤保留事务。每一步都必须独立完成。@DeanClark我解决了它,谢谢。