【问题标题】:Spring Data JdbcTemplate - Multiple Datasources - Lock wait timeout exceededSpring Data JdbcTemplate - 多个数据源 - 超过锁定等待超时
【发布时间】:2021-08-28 11:29:06
【问题描述】:

我在 Spring MVC 框架中有一个带有 @Transactional 注释的服务,它调用两个不同的 DAO,使用不同的 JdbcTemplate 和不同的数据源:

  • JDBCTemplate1(链接到 Datasource1)
  • JDBCTemplate2(链接到 Datasource2)

为了在服务中使用相同的事务,我们为两个数据源配置了 ChainedTransactionManager。

服务调用两个 Daos,一个使用 JDBCTemplate1 在一个表中创建一行,另一个 Dao 使用 JDBCTemplate2 在另一个表中创建一行,使用 JDBCTemplate1 添加的行的 PK 作为 FK。

似乎 MySQL 正在锁定第一个数据源的表中的行,直到提交,当我尝试在第二个数据源中将其分配为 FK 时,我无法访问它,从而产生锁定等待 tiemout。这没有任何意义,因为两者都在同一个事务中。

事务它自己工作正常。如果我在第一个数据源的表中创建行,并在第二个数据源的表中创建行(但没有分配 PK),如果提交,两者都在整个事务中提交,如果整个事务回滚,则两者都回滚.

似乎由于某种原因,Transaction 无法解锁在第一个数据源中创建的行以供第二个数据源使用。

有什么线索吗?我认为这个问题与 MySQL 有关,与 @Transactional 行为有关,但我不知道如何解决它。

谢谢!

【问题讨论】:

    标签: java mysql spring-mvc jdbctemplate spring-transactions


    【解决方案1】:

    您可以删除 FK 引用并检查吗?

    【讨论】:

    • 是的,删除 FK 没有问题。
    猜你喜欢
    • 2016-12-16
    • 2011-01-07
    • 1970-01-01
    • 2019-11-20
    • 2017-02-01
    • 2011-12-25
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多