问题描述:
调用链:controller1的接口A->service1的方法A->service2的方法B
方法A开启了事务,且指定了数据库A的数据源
方法B也开启了事务,使用了默认的事务传播机制(PROPAGATION_REQUIRED),即加入到了方法A的事务中,同时又指定了数据库B的数据源
方法A和B里面都有数据库查询操作
在调用接口A时发生了未找到数据库表结构的异常
原因分析:
在同一个事务里面切换数据源是不起作用的,因为同一个事务只能作用在单个数据源上,切换数据源需要在不同事务中操作
解决方案:
这里需要把方法B的事务传播机制改为PROPAGATION_REQUIRES_NEW,即把方法A上的事务挂起,新建一个事务,这样切换数据源就可以生效了