首页 > 解决方案 > Spring Data JdbcTemplate - 多个数据源 - 超过锁定等待超时

问题描述

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

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

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

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

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

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

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

谢谢!

标签: javamysqlspring-mvcjdbctemplatespring-transactions

解决方案


你可以删除FK参考并检查吗?


推荐阅读