Spring Data JdbcTemplate-多个数据源-超过锁定等待超时



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

  • JDBCTemplate1(链接到数据源1(
  • JDBCTemplate2(链接到数据源2(

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

服务调用两个Dao,一个使用JDBCTemplate1在一个表中创建一行,另一个Dao使用JDBCTemplate 2在另一个表中将JDBCTemplate 1添加的行的PK用作FK。

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

自己交易,一切正常。如果我在第一个数据源的表中创建行,并在第二个数据源中创建行(但不分配PK(,如果已提交,则两者都将在整个事务中提交,如果整个事务是回滚,则两者均为回滚。

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

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

谢谢!

是否可以删除FK引用并进行检查?

最新更新