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)