在动态数据源中,如果一个方法开启了事务,那么里面包含了一个非事务的预期操作其它数据源的方法,那么这个内嵌操作实际操作的是外层方法的数据源。
根本原因是因为如果有事务的话,正常情况下涉及到的所有SQL语句,会在事务方法的结尾处进行提交,而此时事务内部调用的方法的动态datasource已经在该方法执行完之后就已经over了。
解决方案:
1.拆分
两个数据源的事放在一个方法中,可以拆分出来,注意自调用事务不生效的解决方案。
2.在被调用的另个数据源的方法上打上 requires_new的传播机制就可以被正常调用了