MybatisPlus多数据源使用多线程时失效的问题

 

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;

    @Override
    public Future<Map<String, Object>> getTableOverview(CountDownLatch latch) {
        return executor.submit(new Callable<Map<String, Object>>() {
            @DS("slave")
            @Override
            public Map<String, Object> call() throws Exception {
                // 设置以后线程数据源
                DynamicDataSourceContextHolder.push("slave");
                Map<String, Object> result;
                try {
                    // 查询数据库办法
                    result = getTableData();
                } finally {
                    latch.countDown();
                    // 强制清空本地线程,避免内存透露,手动调用push可调用此办法确保革除
                    DynamicDataSourceContextHolder.clear();
                }
                return result;
            }
        });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis Plus多数据源的原理是通过动态切换数据源实现的。在Mybatis Plus中,可以配置多个数据源,并使用一个数据源上下文来管理当前使用数据源。具体原理如下: 1. 配置多个数据源:在Spring Boot的配置文件中,配置多个数据源的连接信息,包括数据库地址、用户名、密码等。 2. 创建数据源对象:根据配置的数据源信息,创建多个数据源对象,例如使用`DruidDataSource`来创建连接池。 3. 创建SqlSessionFactory:针对每个数据源,分别创建对应的`SqlSessionFactory`,用于生成`SqlSession`。 4. 创建数据源上下文:通过自定义的数据源上下文对象,管理当前使用数据源。可以使用`ThreadLocal`来保存当前线程使用数据源。 5. 动态切换数据源:在需要切换数据源的地方,通过调用数据源上下文的切换方法,设置当前线程使用数据源。这样,在执行数据库操作Mybatis Plus会根据当前线程使用数据源来选择对应的`SqlSessionFactory`和`SqlSession`。 6. 数据库操作:通过Mybatis Plus提供的API进行数据库操作,例如执行查询、插入、更新等操作。Mybatis Plus会根据当前线程使用数据源来选择对应的`SqlSessionFactory`和`SqlSession`。 通过上述步骤,就可以实现在同一个项目中使用多个数据源进行数据库操作。需要注意的是,配置多数据源要确保数据源的唯一标识不重复,并且在切换数据源要注意线程安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值