关于多数据源的配置,前面和大伙介绍过 JdbcTemplate 多数据源配置,那个比较简单,本文来和大伙说说 MyBatis 多数据源的配置。

其实关于多数据源,我的态度还是和之前一样,复杂的就直接上分布式数据库中间件,简单的再考虑多数据源。这是项目中的建议,技术上的话,当然还是各种技术都要掌握的。

工程创建

首先需要创建 MyBatis 项目,项目创建和前文的一样,添加 MyBatis、 MySQL 以及 Web 依赖:

Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源_sql

项目创建完成后,添加 Druid 依赖,和 JdbcTemplate 一样,这里添加 Druid 依赖也必须是专为 Spring Boot 打造的 Druid,不能使用传统的 Druid。完整的依赖如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
<scope>runtime</scope>
</dependency>

多数据源配置

接下来配置多数据源,这里基本上还是和 JdbcTemplate 多数据源的配置方式一致,首先在 application.properties 中配置数据库基本信息,然后提供两个 DataSource 即可,这里我再把代码贴出来,里边的道理条条框框的,大伙可以参考前面的文章,这里不再赘述。

application.properties 中的配置:

spring.datasource.one.url=jdbc:mysql:///test01?useUnicode=true&characterEncoding=utf-8
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.two.url=jdbc:mysql:///test02?useUnicode=true&characterEncoding=utf-8
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource

然后再提供两个 DataSource,如下:

@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties(prefix = "spring.datasource.one")
DataSource dsOne() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.datasource.two")
DataSource dsTwo() {
return DruidDataSourceBuilder.create().build();
}
}

MyBatis 配置

接下来则是 MyBatis 的配置,不同于 JdbcTemplate,MyBatis 的配置要稍微麻烦一些,因为要提供两个 Bean,因此这里两个数据源我将在两个类中分开来配置,首先来看第一个数据源的配置:

@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis.mapper1",sqlSessionFactoryRef = "sqlSessionFactory1",sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfigOne {
@Resource(name = "dsOne")
DataSource dsOne;

@Bean
SqlSessionFactory sqlSessionFactory1() {
SqlSessionFactory sessionFactory = null;
try {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dsOne);
sessionFactory = bean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return sessionFactory;
}
@Bean
SqlSessionTemplate sqlSessionTemplate1() {
return new SqlSessionTemplate(sqlSessionFactory1());
}
}

创建 MyBatisConfigOne 类,首先指明该类是一个配置类,配置类中要扫描的包是 org.javaboy.mybatis.mapper1 ,即该包下的 Mapper 接口将操作 dsOne 中的数据,对应的 SqlSessionFactory 和 SqlSessionTemplate 分别是 sqlSessionFactory1 和 sqlSessionTemplate1,在 MyBatisConfigOne 内部,分别提供 SqlSessionFactory 和 SqlSessionTemplate 即可, SqlSessionFactory 根据 dsOne 创建,然后再根据创建好的SqlSessionFactory 创建一个 SqlSessionTemplate。

这里配置完成后,依据这个配置,再来配置第二个数据源即可:

@Configuration
@MapperScan(basePackages = "org.javaboy.mybatis.mapper2",sqlSessionFactoryRef = "sqlSessionFactory2",sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfigTwo {
@Resource(name = "dsTwo")
DataSource dsTwo;

@Bean
SqlSessionFactory sqlSessionFactory2() {
SqlSessionFactory sessionFactory = null;
try {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dsTwo);
sessionFactory = bean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return sessionFactory;
}
@Bean
SqlSessionTemplate sqlSessionTemplate2() {
return new SqlSessionTemplate(sqlSessionFactory2());
}
}

好了,这样 MyBatis 多数据源基本上就配置好了,接下来只需要在 org.javaboy.mybatis.mapper1 和 org.javaboy.mybatis.mapper2 包中提供不同的 Mapper,Service 中注入不同的 Mapper 就可以操作不同的数据源。

mapper 创建

org.javaboy.mybatis.mapper1 中的 mapper:

public interface UserMapperOne {
List<User> getAllUser();
}

对应的 XML 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.javaboy.mybatis.mapper1.UserMapperOne">
<select id="getAllUser" resultType="org.javaboy.mybatis.model.User">
select * from t_user;
</select>
</mapper>

org.javaboy.mybatis.mapper2 中的 mapper:

public interface UserMapper {
List<User> getAllUser();
}

对应的 XML 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.javaboy.mybatis.mapper2.UserMapper">
<select id="getAllUser" resultType="org.javaboy.mybatis.model.User">
select * from t_user;
</select>
</mapper>

接下来,在 Service 中注入两个不同的 Mapper,不同的 Mapper 将操作不同的数据源。

好了,关于 MyBatis 多数据源本文就先说到这里。

重磅

今年 5 月份的时候,松哥发了一个视频资源库,当时和大家说,这个资源库会定期更新,后来却迟迟未更新,其实不是我没资源了,是因为当时的关键字是我一个一个在微信后台配置的,配置到后面发现,后台配置关键字有数量上限,没法继续配置了,所以这事就搁置下来了。

九月份松哥上线了自己的服务,和微信的后台对接起来,具体实现大家可以参考这两篇文章

现在再配置关键字就没有限制了。于是最近抽空把资源更新了一波,废话不多说,大家在公众号【江南一点雨】后台回复相应的口令,就可以获取相应的视频下载地址。

Java 基础

资源名称

口令

Java 基础语法

javaboy4096

Java 面向对象

javaboy6148

JavaSE 飞机大战项目

javaboy2053

深入面向对象和数组

javaboy8200

Java 常用类详解

javaboy4105

Java 异常机制解析

javaboy6157

Java 集合与数据结构

javaboy2062

JavaIO 流全解析

javaboy8209

深入理解 Java 多线程

javaboy4114

Java 网络编程

javaboy6166

手动开发一个 Web 服务器

javaboy2071

深入理解 Java 注解+反射

javaboy8218

Java23 种设计模式

javaboy4123

学会 Java 正则表达式

javaboy6175

JDBC 详解

javaboy2080

独立开发 SORM 框架

javaboy8227

快人一步,Java10 新特性全解析

javaboy4132

Java 数据结构和算法

javaboy6184

深入理解 Java 虚拟机

javaboy2089

Java 解析XML文件

javaboy8236

数据库

资源名称

口令

Oracle 数据库安装及简单 SQL

javaboy4141

Oracle 账户管理及查询语句

javaboy6193

Oracle 中的函数

javaboy2098

Oracle 中的子查询

javaboy8245

Oracle 中常见的表操作

javaboy4150

Oracle 中的数据备份

javaboy6202

MySQL 基础

javaboy2107

PowerDesigner 教程

javaboy8254

JDBC 操作数据库

javaboy4159

MySQL 优化

javaboy6211

Oracle 高级课程

javaboy2116

数据库与 SQL 优化

javaboy6283

数据库集群与高并发

javaboy2188

Web 基础

资源名称

口令

HTML 入门教程

javaboy8263

CSS 教程

javaboy4168

JavaScript 视频教程

javaboy6220

jQuery 视频教程

javaboy2125

EasyUI 视频教程

javaboy8272

Servlet 基础

javaboy4177

Servlet 中的 Request 和 Response

javaboy6229

Servlet 请求转发与重定向

javaboy2134

Session 和 Cookie

javaboy8281

JSP 详解

javaboy4186

用户管理系统实战

javaboy6238

Ajax 详解

javaboy2143

EL 和 JSTL

javaboy8290

过滤器详解

javaboy4195

监听器详解

javaboy6247

KnockoutJS 实战视频

javaboy2152

Java 高级

资源名称

口令

IntelliJIDEA 视频教程

javaboy4285

Java 高并发秒杀方案

javaboy8299

Activiti 工作流实战解析

javaboy4204

Java 并发编程与高并发实战

javaboy6256

Linux 快速入门

javaboy2161

Maven 详解

javaboy8308

Git 应用详解

javaboy4213

Svn 入门教程

javaboy6265

高并发编程与线程池

javaboy2170

系统优化与 JVM 调优

javaboy8317

Java 编程规范

javaboy4222

AIO、BIO、NIO 详解

javaboy6274

Netty 高级视频教程

javaboy2179

ActiveMQ 消息中间详解

javaboy8326

单点登录视频教程

javaboy4231

Dubbo 详解

javaboy8335

Redis 全解析

javaboy4240

VSFTPD+NGINX 视频教程

javaboy6292

MyBatis 视频教程

javaboy2197

Spring4 视频教程

javaboy8344

SpringMVC 视频教程

javaboy4249

SSM 框架整合视频教程

javaboy6301

RBAC 权限控制视频教程

javaboy2206

Hibernate4 视频教程

javaboy8353

Jfinal 视频教程

javaboy4258

Shiro 视频教程

javaboy6310

Solr 视频教程

javaboy2215

Struts2 视频教程

javaboy8362

Nginx 视频教程

javaboy4267

Redis 缓存详解

javaboy6319

JVM 虚拟机优化

javaboy2224

Zookeeper 详解视频

javaboy8371

Linux 基本操作

javaboy6328

架构师面试攻略(文档)

javaboy2233

架构师面试攻略(视频)

javaboy8380

JUC 视频教程

javaboy6400

MySQL 高级教程

javaboy2305

Java 邮件开发教程

javaboy8452

Maven 实战视频

javaboy8443

自己 DIY 一个 Tomcat

javaboy4339

大前端

资源名称

口令

HTML5 新特性

javaboy4276

AngularJS 视频教程

javaboy6337

Grunt 视频教程

javaboy2242

Gulp 视频教程

javaboy8389

Webpack 视频教程

javaboy4294

Bootstrap 视频教程

javaboy6346

CSS3 视频教程

javaboy2251

ES6 视频教程

javaboy8398

HTML5 核心技术

javaboy4303

HTML5 实战

javaboy6355

HTML5 项目实战

javaboy2260

JS 模块化视频教程

javaboy8407

less 视频教程

javaboy4312

NodeJS 视频教程

javaboy6364

React 视频教程

javaboy2269

Zepto 视频教程

javaboy8416

HTML+CSS 实战视频

javaboy4321

JavaScript140 集

javaboy6373

jQuery 视频教程

javaboy2278

JavaScript 高级语法视频教程

javaboy8425

Vue 项目实战视频

javaboy4330

CSS3 特效实战

javaboy6382

HTML5 特效实战

javaboy2287

HTML5+Canvas 实现刮刮卡

javaboy8434

Gradle 从入门到精通

javaboy6391

mpvue 项目实战

javaboy2296

Vue 最新最全视频教程

javaboy4348

大数据

资源名称

口令

Linux 操作系统

javaboy4357

Linux 基本命令

javaboy6409

Linux 文件安装

javaboy2314

Shell 编程

javaboy8461

网络基础知识

javaboy4366

LVS 集群与高并发

javaboy6418

Nginx 和高并发

javaboy2323

keepalive 和单点故障

javaboy8470

HDFS 分布式文件系统

javaboy4375

mapreduce 分布式计算

javaboy6427

YARN 资源管理与任务调度

javaboy2332

mapreduce 计算案例

javaboy8479

HIVE 视频教程

javaboy4384

Hbase 数据库详解

javaboy6436

zookeeper 协同处理

javaboy2341

CDH 使用

javaboy8488

HUE 使用

javaboy4393

IMPALA 详解

javaboy6445

oozie 详解

javaboy2350

elasticsearch 详解

javaboy8497

Redis 内存数据

javaboy4402

Scala 入门

javaboy6454

Spark 详解

javaboy2359

Spark 高级

javaboy8506

Spark-Stream 流式计算

javaboy4411

Kafka 分布式消息队列

javaboy6463

STORM 流式计算框架

javaboy2368

Python 语言基础

javaboy8515

回归算法

javaboy4420

分类算法、决策树

javaboy6472

聚类算法、微博案例

javaboy2377

推荐算法

javaboy8524

大型电商日志分析(项目实战)

javaboy4429

智慧交通(项目实战)

javaboy6481

智能 App(项目实战)

javaboy2386

人工智能

资源名称

口令

人工智能入门

javaboy8533

线性回归深入与代码实现

javaboy4438

梯度下降算发实现

javaboy6490

逻辑回归详解和应用

javaboy2395

分类项目案例与神经网络算法

javaboy8542

多分类、决策树分类与随机森林分类

javaboy4447

分类评估与聚类

javaboy6499

密度聚类与谱聚类

javaboy2404

Tensorflow 安装并实现线性回归

javaboy8551

TensorFlow 深入、TensorFlow可视化

javaboy4456

DNN 深度神经网络手写图片识别

javaboy6508

TensorBoard 可视化

javaboy2413

卷积神经网络、CNN 识别图片

javaboy8560

卷积神经网络深入,AlexNet 模型实现

javaboy4465

Keras 深度学习框架

javaboy6517

分布式相关

资源名称

口令

ZooKeeper 简介

javaboy2422

ZooKeeper 安装

javaboy8569

ZooKeeper 基本数据模型

javaboy4474

基于 Linux 的 ZK 客户端命令

javaboy6526

选举模式和 ZK 集群安装

javaboy2431

JavaAPI 操作 ZK

javaboy8578

ApacheCurator 客户端

javaboy4483

Dubbo 入门到重构服务

javaboy6535

分布式锁

javaboy2440

Zookeeper 总结

javaboy8587

项目实战

资源名称

口令

OA 办公自动化项目1

javaboy4492

OA 办公自动化项目2

javaboy6544

OA 办公自动化项目3

javaboy2449

OA 办公自动化项目4

javaboy8596

备锋客户关系管理(CRM)系统

javaboy4501

百战客户关系管理系统

javaboy6553

宅急送项目

javaboy2458

高仿人人网项目

javaboy8605

Java 邮件开发项目

javaboy4510

在线支付实战视频

javaboy6562

俄罗斯方块游戏实战

javaboy2467

贪吃蛇视频教程

javaboy8614

交通灯管理系统

javaboy4519

银行业务调度系统实战

javaboy6571

供应链系统实战视频

javaboy2476

网上商城项目实战

javaboy8623

医药采购平台管理系统

javaboy4528

点餐系统实战

javaboy6580

杰信商贸 SSM 版

javaboy2485

国家税务协同平台项目

javaboy8632

javaWeb 聊天室

javaboy4537

网上书店

javaboy6589

手机进销存系统

javaboy2494

QQ 聊天器

javaboy8641

ERP 项目

javaboy4546

坦克大战

javaboy6598

五子棋游戏

javaboy2503

报名系统 Activity

javaboy8650

OA 供应链系统

javaboy4555

用户管理系统

javaboy6607

JavaWeb 图书商城

javaboy2512

VIP 商场

javaboy8659

企业招聘系统

javaboy4564

博客系统项目

javaboy6616

超级玛丽

javaboy2521

成绩管理系统

javaboy8668

个人理财系统

javaboy4573

人事管理系统

javaboy6625

JBPM 采购申请系统

javaboy2530

电子商务网站

javaboy8677

跨平台 App 开发

javaboy4582

文档资源

资源名称

口令

Docker 教程

docker

Redis 教程

redis

RocketMQ 教程

rocketmq

Java8 新特性文档

java8

设计模式教程

设计模式

网络协议教程

网络

netty 教程

netty

web 全栈指南

web全栈

好了,本次就先更新这么多,如果这里没有你想要的,也也可以留言说说你需要的资料,松哥会及时更新资源哦。​ 另外,大家在公众号后台回复 ​资源​ ,也可以获取本文电子版。

Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源_sql_02

如果这些资源帮助到你了,欢迎转发给更多小伙伴哦。

Spring Boot2 系列教程(二十二)整合 MyBatis 多数据源_视频教程_03