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

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

工程创建

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

项目创建完成后,添加 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 多数据源的更多相关文章

  1. Spring Boot2 系列教程(三十二)Spring Boot 整合 Shiro

    在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...

  2. Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache

    用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...

  3. Spring Boot2 系列教程(十九) | @Value 和 @ConfigurationProperties 的区别

    微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 最近有跳槽的想法,所以故意复习了下 SpringBoot 的相关知识,复习得比较细.其中有些,我感觉是以前忽略掉的东西,比如 ...

  4. Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源

    多数据源配置也算是一个常见的开发需求,Spring 和 SpringBoot 中,对此都有相应的解决方案,不过一般来说,如果有多数据源的需求,我还是建议首选分布式数据库中间件 MyCat 去解决相关问 ...

  5. Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

  6. Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源

    本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...

  7. Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis

    在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...

  8. Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享

    这篇文章是松哥的原创,但是在第一次发布的时候,忘了标记原创,结果被好多号转发,导致我后来整理的时候自己没法标记原创了.写了几百篇原创技术干货了,有一两篇忘记标记原创进而造成的一点点小小损失也能接受,不 ...

  9. Spring Boot2 系列教程(二十一)整合 MyBatis

    前面两篇文章和读者聊了 Spring Boot 中最简单的数据持久化方案 JdbcTemplate,JdbcTemplate 虽然简单,但是用的并不多,因为它没有 MyBatis 方便,在 Sprin ...

随机推荐

  1. 2.28秒创建一个k8s集群(非理论篇,理论自行 -- )

    准备3台centos 7+ (建议7以上,不然要会很麻烦,要升级内核等等,扯淡的东西) 安装docker 和k8s集群(均以最新版为例)基于官网 设置静态ip(可选) 查看本机的网关ip cd /Li ...

  2. TestNG如何用命令行运行

    TestNG如何用命令行运行 调用TestNG最简单的方法事下面的: java org.testng.TestNG testng1.xml 以上是我在网上搜索到的最多的答案,但对于第一次接触testn ...

  3. 【洛谷5643】[PKUWC2018] 随机游走(Min-Max容斥+待定系数法+高维前缀和)

    点此看题面 大致题意: 从一个给定点出发,在一棵树上随机游走,对于相邻的每个点均有\(\frac 1{deg}\)的概率前往.多组询问,每次给出一个点集,求期望经过多少步能够访问过点集内所有点至少一次 ...

  4. [译]Vulkan教程(03)开发环境

    [译]Vulkan教程(03)开发环境 这是我翻译(https://vulkan-tutorial.com)上的Vulkan教程的第3篇. In this chapter we'll set up y ...

  5. python - 操作excel表格

    说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...

  6. 【LeetCode】11. 盛最多水的容器

    题目 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两 ...

  7. 蓝色大气简约立体答辩ppt模板推荐

    小编个人非常喜欢这个模版,大气深蓝色,具有科技感,非常适合学生的毕业答辩PPT模板. 模版来源:http://ppt.dede58.com/gongzuohuibao/26496.html

  8. seaborn总结

    Seaborn 数据可视化基础 介绍 Matplotlib 是支持 Python 语言的开源绘图库,因为其支持丰富的绘图类型.简单的绘图方式以及完善的接口文档,深受 Python 工程师.科研学者.数 ...

  9. CronExpression表达式详解和案例

    1. cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)} 2. cron表达式各占位符解释: {秒数} ==> 允许值范围: 0~59 ,不允许 ...

  10. jsb闭包

    1.什么是闭包? anw:能够读取其他函数内部变量的函数 本质:将函数内部与函数外部连接起来 2.由于在js中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成’定义一个在函数内部的函数 ...