Service内有事务的A方法调用无事务的b方法切换数据源

问题遇到的现象和发生背景
A方法中需要对数据库insert,在insert前调用B方法切换数据源查询数据,A方法加@Transactional(propagation = Propagation.REQUIRED, rollbackForClassName = "Exception")注解有事务,B方法不加事务,切换数据源失败。
查询发现在事务内不能切换数据源,尝试将B方法改成private让B方法不在事务内失败,将B方法加@Transactional(propagation = Propagation.NOT_SUPPORTED)还是失败,将B方法放在另一个Service中还是失败
怎样让A方法的事务不传播到B方法,让B方法成功切换数据源

需要使用事务的隔离级别的控制,将B方法的事务隔离级别设置为Propagation.NOT_SUPPORTED,这样B方法中不会开启事务。代码如下:

@Transactional(propagation = Propagation.REQUIRED, rollbackForClassName = "Exception")
public void A() {
B();
// insert数据
}

@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void B() {
// 切换数据源
}

只要是加了spring事务,你就别想切换数据源,因为此时是复用connecttion而不是从数据源获取connection,要么自己改造源码,要么不使用spring事务

手动开启关闭事务就可以解决了