SpringBoot+MyBatis多数据源解决方案
这篇文档教大家配置SpringBoot、MyBatis整合多数据源的配置方法。
一、数据库连接配置
SpringBoot启动的配置文件配置数据库的连接配置,代码如如下:
mybatis配置mybatis:config-location:classpath:mybatis/:main:allow-bean-definition-overriding:truesession:store-type:nonedatasource:test1:jdbc-url:jdbc:mysql://10.10.1.232:3306/zhlc_demo?useUnicode=truecharacterEncoding=UTF-8allowMultiQueries=trueusername:zhlcpassword:zhlc123driver-class-name::jdbc-url:jdbc:mysql://10.10.1.96:31938/test?useUnicode=truecharacterEncoding=UTF-8allowMultiQueries=trueusername:rootpassword:rootdriver-class-name:
其中为项目启动端口号,项目访问根路径为http://localhost:8480。为连接的第一个数据库的数据源(相应的jdbc连接url、MySQL用户名密码)。为连接的第二个数据库的数据源。并加上相应的驱动。
注意:因为使用的是为yml格式的文件,因此每一级的层级关系为

呈递进关系,逐级空行。
在src/main/resources/mybatis目录下

文件的内容为:
?xmlversion="1.0"encoding="UTF-8"?!DOCTYPEconfigurationPUBLIC"-//////EN"""configurationtypeAliasestypeAliasalias="Integer"type=""/typeAliasalias="Long"type=""/typeAliasalias="HashMap"type=""/typeAliasalias="LinkedHashMap"type=""/typeAliasalias="ArrayList"type=""/typeAliasalias="LinkedList"type=""//typeAliases/configuration
二、数据源DataSource配置
新建包
在该包下新建文件,文件上部加上包扫描注解

表示此数据源文件扫描包下的DAO文件。
数据源建立如下

为前面中的数据源配置。
建立sqlSessionFactory,如下,并注入datasource

配置事务管理器transactionManager

配置sqlSessionTemplate如下

完整的DataSourceConfig文件代码如下:
;;;;;;;;;;;;;;;;;/***Createdbyliyueon2019/07/12.*/@Configuration@MapperScan(basePackages="",sqlSessionTemplateRef="test1SqlSessionTemplate")publicclassDataSource1Config{@Bean(name="test1DataSource")@ConfigurationProperties(prefix="")@PrimarypublicDataSourcetestDataSource(){().build();}@Bean(name="test1SqlSessionFactory")@PrimarypublicSqlSessionFactorytestSqlSessionFactory(@Qualifier("test1DataSource")DataSourcedataSource)throwsException{SqlSessionFactoryBeanbean=newSqlSessionFactoryBean();(dataSource);//分页插件Interceptorinterceptor=newPageInterceptor();Propertiesproperties=newProperties();("helperDialect","mysql");("offsetAsPageNum","true");("rowBoundsWithCount","true");("reasonable","true");("supportMethodsArguments","true");("params","pageNum=pageNumKey;pageSize=pageSizeKey;");(properties);(newInterceptor[]{interceptor});(newPathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml"));();}@Bean(name="test1TransactionManager")@PrimarypublicDataSourceTransactionManagertestTransactionManager(@Qualifier("test1DataSource")DataSourcedataSource){returnnewDataSourceTransactionManager(dataSource);}@Bean(name="test1SqlSessionTemplate")@PrimarypublicSqlSessionTemplatetestSqlSessionTemplate(@Qualifier("test1SqlSessionFactory")SqlSessionFactorysqlSessionFactory)throwsException{returnnewSqlSessionTemplate(sqlSessionFactory);}}三、项目辅助文件介绍
UserSexEnum枚举类如下

异常处理类如下

全局异常拦截处理如下:

服务器Servel异常如下:

结果处理类如下
错误码如图

封装返回结果实体

通用结果处理工具类如图

实体类User如图

四、数据源1的DAO层
在包下面的DAO层UserMapper代码如下:

对应的src/main/resources/mybatis/mapper/test1下面的xml文件如图

五、配置数据源2
在新建配置数据源2扫描的DAO

对应的MyBatisxml扫描为

完整代码为
;;;;;;;;;;;;;;;;/***Createdbyliyueon2019/07/12.*/@Configuration@MapperScan(basePackages="",sqlSessionTemplateRef="test2SqlSessionTemplate")publicclassDataSource2Config{@Bean(name="test2DataSource")@ConfigurationProperties(prefix="")publicDataSourcetestDataSource(){().build();}@Bean(name="test2SqlSessionFactory")publicSqlSessionFactorytestSqlSessionFactory(@Qualifier("test2DataSource")DataSourcedataSource)throwsException{SqlSessionFactoryBeanbean=newSqlSessionFactoryBean();(dataSource);//分页插件Interceptorinterceptor=newPageInterceptor();Propertiesproperties=newProperties();("helperDialect","mysql");("offsetAsPageNum","true");("rowBoundsWithCount","true");("reasonable","true");("supportMethodsArguments","true");("params","pageNum=pageNumKey;pageSize=pageSizeKey;");(properties);(newInterceptor[]{interceptor});(newPathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml"));();}@Bean(name="test2TransactionManager")publicDataSourceTransactionManagertestTransactionManager(@Qualifier("test2DataSource")DataSourcedataSource){returnnewDataSourceTransactionManager(dataSource);}@Bean(name="test2SqlSessionTemplate")publicSqlSessionTemplatetestSqlSessionTemplate(@Qualifier("test2SqlSessionFactory")SqlSessionFactorysqlSessionFactory)throwsException{returnnewSqlSessionTemplate(sqlSessionFactory);}}第2个数据源的DAO层UserMapper在目录下:

数据源2MyBatisxml文件如下

六、Service层
数据源1Service层完整代码如下:
;;;;;;;;@Service("userService")@TransactionalpublicclassUserServiceImplimplementsUserService{@AutowiredprivateUserMapperuserMapper1;@OverridepublicListUsergetAll(){();}}数据源2Service层完整代码如下:
;;;;;;;;@Service("userService2")@TransactionalpublicclassUserServiceImpl2implementsUserService2{@AutowiredprivateUserMapper2userMapper2;@OverridepublicListUsergetAll(){();}}七、Controller根据输入参数切换数据源

八、录入数据
数据源1users表录入数据

数据源2users表录入数据

九、Swagger配置

十、启动看结果
启动项目,打开Swagger:http://localhost:8480/



同一个实体类User,数据源切换成功!