【问题标题】:Database locking in Spring BatchSpring Batch 中的数据库锁定
【发布时间】:2019-04-24 12:56:35
【问题描述】:

我正在处理一个在使用默认 JdbcCursorItemReader 时遇到 DB2 死锁的 Spring Batch 应用程序。当批处理作业遇到错误时,我们设置了一个 SkipListener 来将“错误”状态写入相关行,这是发生死锁的时间。

我们发现通过使用默认的 JdbcPagingItemReader,我们能够避免死锁情况,尽管我们不确定为什么会出现这种情况。

我对 Spring Batch 的理解是,一旦从查询中读入 ResultSet,任何一个 Reader 都应该释放数据库上的锁,但 JdbcCursorItemReader 似乎没有发生这种情况。

谁能帮我理解为什么会这样?

谢谢!

【问题讨论】:

  • 这可能与 DB2 的 JDBC 驱动有关(不是 Spring Batch 问题)。我邀请您阅读jira.spring.io/browse/BATCH-1273 中的 cmets(尽管它谈到了可能不是您的用例的 XA,但它仍然是相关的)。 “在某些平台上,光标只是一个坏主意。”正如 Dave Syer 所说。

标签: spring spring-batch db2-zos


【解决方案1】:

JdbcCursorItemReader 将在数据库中维护一个位置(光标),以便它知道接下来从哪里读取。此游标由锁维护。 JdbcPageItemReader 似乎正在提交从已知起点和终点请求数据的查询,因此它只读取这两个点之间的数据,并且在调用之间不需要锁定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多