确认
- [X] 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
- [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
- [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题
功能改进
单独使用Db kit可以正常完成功能,增加https://github.com/baomidou/dynamic-datasource 后发现无法切换数据源。希望增加对多数据源的支持
参考资料
JDK Version: temurin64-21.0.3
SpringBoot Version: 3.3.5
mybatis-plus:3.5.9
dynamic-datasource-spring-boot-starter Version:4.3.1
druid Version: 无
Mapper上使用@DS注解,多数据源切换在db kit中无法正常切换。
db kit中使用的mapper是未经dynamic-datasource代理的mapper所以注解未生效。改为service中使用baseMapper则正常。
Steps to reproduce
// entity/Task.java
@Data
public class Task {
@TableId(type = IdType.AUTO)
protected Integer id;
}
// mapper/TaskMapper.java
@DS("old")
public interface TaskMapper extends BaseMapper<Task> {
}
// Main.java
@MapperScan({"com.cc.mapper"})
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
Task task = Db.getById(id, Task.class);
初步定位问题代码:
public final class SqlHelper {
public static <T, R, M extends BaseMapper<T>> R execute(Class<T> entityClass, SFunction<M, R> sFunction) {
SqlSession sqlSession = sqlSession(entityClass);
try {
return sFunction.apply(getMapper(entityClass, sqlSession));
} finally {
CompatibleHelper.getCompatibleSet().closeSqlSession(sqlSession, GlobalConfigUtils.currentSessionFactory(entityClass));
}
}
}
getMapper(entityClass, sqlSession) 这里获取的不是最终代理的mapper
Comment From: archfish
https://github.com/baomidou/dynamic-datasource/issues/682
Comment From: VampireAchao
在做了