公司在做多租户的方案时,决定根据不同租户创建多个数据库。所以,请求调mybatis时,需要根据请求的某个参数去走不同的库,需要实现动态数据源切换。实现的时候遇到不少坑,今天看了一下mybatis源码,在这记录一下。
关键类:AbstractRoutingDataSource
这个类是spring-jdbc专门用来实现动态数据源切换的类。在项目启动的时候,我们可以把所有数据源根据key-value的形式放到这个类的targetDataSources里去。在调用数据库时,可以用determineCurrentLookupKey来决定当前调用(线程)使用哪个数据源。是的,这里可以用ThreadLocal来实现key的管理。
下面详细介绍:
- 依赖:
<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