需要使用事务的隔离级别的控制,将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事务
手动开启关闭事务就可以解决了