【问题标题】:How to handle binary(Blob) data in Spring Batch application如何在 Spring Batch 应用程序中处理二进制(Blob)数据
【发布时间】:2017-10-23 16:18:36
【问题描述】:

我的要求是从数据库中读取数据并将其聚合并转换为字节,然后将其流式传输到 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 和一个将行转换为 CSV 格式但以字节为单位的处理器。然后我有一个自定义 ItemWriter 将数据流式传输到 Blob 列。

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

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

【问题讨论】:

  • 没有。您不能跨步骤持有事务。每个步骤都必须自己提交。
  • @DeanClark 我解决了,谢谢。

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


【解决方案1】:

我解决了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 2018-01-21
    • 1970-01-01
    • 2011-03-04
    • 2011-08-16
    相关资源
    最近更新 更多