java - Spring Data JdbcTemplate - 多个数据源 - 超过锁定等待超时
问题描述
我在 Spring MVC 框架中有一个带有 @Transactional 注释的服务,它调用两个不同的 DAO,使用不同的 JdbcTemplate 和不同的数据源:
- JDBCTemplate1(链接到 Datasource1)
- JDBCTemplate2(链接到 Datasource2)
为了在服务中使用相同的事务,我们为两个数据源配置了 ChainedTransactionManager。
服务调用两个 Daos,一个使用 JDBCTemplate1 在一个表中创建一行,另一个 Dao 使用 JDBCTemplate2 在另一个表中创建一行,使用 JDBCTemplate1 添加的行的 PK 作为 FK。
似乎 MySQL 正在锁定第一个数据源的表中的行,直到被提交,当我尝试在第二个数据源中将其分配为 FK 时,我无法访问它,从而产生锁定等待 tiemout。这没有任何意义,因为两者都在同一个事务中。
交易它自己工作正常。如果我在第一个数据源的表中创建行,并在第二个数据源的表中创建行(但没有分配 PK),如果提交,两者都在整个事务中提交,如果整个事务回滚,则两者都回滚.
似乎由于某种原因,Transaction 无法解锁在第一个数据源中创建的行以供第二个数据源使用。
有什么线索吗?我认为这个问题与 MySQL 有关,与@Transactional 行为有关,但我不知道如何解决它。
谢谢!
解决方案
你可以删除FK参考并检查吗?
推荐阅读
- java - 如何在 JDesktopPane 的背景中创建 JLabel?
- python - Rosrun 命令不执行 python 文件
- php - 图片上传不会在文件夹中创建图片,只在数据库中
- regex - 如何使用正则表达式
- javascript - 如何在 react-native 中获取 TextInput 值
- playframework - 使用 Play Framework for Java,如何从控制器返回 500 响应?
- vba - 运行宏时的复制和粘贴保护
- actionscript-3 - AS3 如何将 adMob 添加到 Adobe Flash/Animate?
- python - 有没有办法在 macOS 的扩展坞中更改 Python Launcher 的名称?
- python - BeautifulSoup解析html列表