mybatis-plus切换数据源失败

mybatis-plus切换数据源失败

现象

多层数据源嵌套切换失败,本意是想查询H2数据源数据,但根据查询结果看,查询的是MySQL数据源

问题代码

H2数据源操作

//由于配置文件已经指定默认数据源是h2,所以这里没有加@DS
@Service
public class H2UserService extends ServiceImpl<UserMapper, User> {

}

MySQL数据源操作

@DS("mysql")
@Service
public class MysqlUserService extends ServiceImpl<UserMapper, User> {

	@Autowired
	private H2UserService h2UserService;

	public void testNestDs() {
        //调用h2数据库操作
		List<User> h2List = h2UserService.list();
		System.out.println("查询H2:");
		h2List.forEach(System.out::println);

		System.out.println("查询MySQL:");
		List<User> mysqlList = super.list();
		mysqlList.forEach(System.out::println);
	}

}

测试

@SpringBootTest
class MultiDatasourceApplicationTests {


	@Autowired
	private MysqlUserService mysqlUserService;

	@Test
	void testNestDs() {
		mysqlUserService.testNestDs();
	}

}

查询的数据结果一样,都是MySQL中的数据

查询H2:
User(id=1, username=admin, password=xxx)  #H2库里的数据实际不是这个,这是MySQL库里面的数据
User(id=2, username=test, password=xxx)
查询MySQL:
User(id=1, username=admin, password=xxx)
User(id=2, username=test, password=xxx)

解决

多层数据源嵌套调用时,即使是默认数据源,也要用@DS指定
在H2数据源操作类上加上 @DS("h2")

@DS("h2")
@Service
public class H2UserService extends ServiceImpl<UserMapper, User> {

}

测试结果

查询H2:
User(id=1, username=adminH2, password=xxx)
User(id=2, username=testH2, password=xxx)
查询MySQL:
User(id=1, username=admin, password=xxx)
User(id=2, username=test, password=xxx)
posted @ 2023-07-11 20:49  theSummerDay  阅读(140)  评论(0编辑  收藏  举报