基于SpringBoot+Mybatis-Plus 实现多数据源
项目背景
公司新开的项目,需要连接业务库,业务库是集群部署的,整体结构,一个集群,对应多个分区,每个分区保存多个店铺数据,也有独立部署的店铺,分区就是数据库连接实例
大概思路
1.一集群都有一个公库,先连接公库地址,查询当前集群下面的所有分区数据库连接地址
2.拿到分区的数据连接地址之后,创建分区数据库连接
3.使用SpringBoot多数据源配置,动态切换数据源
上代码
大概思路,代码方面不方便写出来,A集群,先看原来数据库设计,公库下主要有个cm_db(数据库表)表维护这当前集群下的所有分区连接信息,主要字段有db_id(数据库id),db_host(服务器地址,主从用","隔开),db_user(用户名),db_pwd(密码)和cm_seller(商家表)主要字段seller_id(卖家id),shop_id(店铺id),db_id(数据库id等; 即: master数据库中的m_datasource表存储当前集群下的所有
数据库链接信息
切换不同的数据源展示不同的数据库信息;
配置文件 application.properties
#配置多数据源
spring.datasource.druid.master.driverClassName=com.mysql.cj.jdbc.Driver
# 使用hikari连接池时 jdbc-url
spring.datasource.druid.master.jdbc-url=jdbc:mysql://192.168.253.100:3306/wsblog
spring.datasource.druid.master.username=root
spring.datasource.druid.master.password=admin
# salve
spring.datasource.druid.slave.driverClassName=com.mysql.cj.jdbc.Driver
# 使用druid连接池时 url
spring.datasource.druid.slave.url=jdbc:mysql://192.168.253.100:3306/shpocart
spring.datasource.druid.slave.username=root
spring.datasource.druid.slave.password=admin
配置类
注意: 在使用
hikari
作为连接池时,如果配置多数据源需要将url
修改为jdbc-url
,使用druid
作为连接池则不需要修改;否则会出现jdbcUrl is required with driverClassName
错误;
package com.wanshen.base.config;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context