金穗农机指南

Spring Boot+MyBatis多数据源解决方案

admin 100

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,数据源切换成功!