实现mybatis未知个数数据源动态切换

本文介绍了如何在多租户场景下,通过SpringBoot和Mybatis实现动态数据源切换。关键类为AbstractRoutingDataSource,依赖于Spring的InitializingBean接口和ThreadLocal进行数据源选择。在配置中,动态解析数据源参数,创建DruidDataSource并放入Spring容器。自定义继承AbstractRoutingDataSource的类,实现determineCurrentLookupKey方法,通过DatabaseContextHolder设置当前线程的数据源。最后,将DynamicDataSource配置给Mybatis的SqlSessionFactory,并注意排除DataSourceAutoConfiguration避免自动配置问题。
摘要由CSDN通过智能技术生成

    公司在做多租户的方案时,决定根据不同租户创建多个数据库。所以,请求调mybatis时,需要根据请求的某个参数去走不同的库,需要实现动态数据源切换。实现的时候遇到不少坑,今天看了一下mybatis源码,在这记录一下。

    关键类:AbstractRoutingDataSource

    这个类是spring-jdbc专门用来实现动态数据源切换的类。在项目启动的时候,我们可以把所有数据源根据key-value的形式放到这个类的targetDataSources里去。在调用数据库时,可以用determineCurrentLookupKey来决定当前调用(线程)使用哪个数据源。是的,这里可以用ThreadLocal来实现key的管理。

    下面详细介绍:

  1.     依赖:
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.0.31</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.1.5.RELEASE</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值