摘要:正常情况下,一个应用一个数据库是标配,也是很多小伙伴在开发企业级应用时最为常见的做法;然而,出于某些特殊的情况,一个应用需要跨数据库实现不同的功能需求 也逐渐变得很普遍!本文,我们将分享介绍一种最为简单的、基于注解式(Java Config)的方式实现Mybatis多数据源的访问。
内容:所谓多数据源,说白了,其实就是“在应用系统中访问多个数据库实现某些业务功能”的另一种诠释!目前一些开源的项目也采用了各种不同的方式实现了“多数据源”,常见的包括“基于Mybatis和Spring JDBC Tempalte数据源 混合实现多数据源”、“基于Mybatis和Spring AOP实现多数据源”;
第一种方式毕竟混合了两种实现方式,对于咱们程序员来讲,就意味着你既需要掌握Mybatis、也需要掌握Spring JDBC Template的编码实现DAO层的操作、访问;
对于第二种方式,有些小伙伴看到AOP可能有点退怯,而且事实上这种实现的过程,需要你在“访问、操作数据库的方法或者类上”额外添加某个注解,标明来源于那个数据源!
本文,我们将不介绍上面这两种,而是采用一种更为简单、便捷、纯粹基于Mybatis的方式来实现多数据源,实战完成过后,你会发现,这种方式实现起来确实很简单,很简洁,很爽,当然啦,一些包目录结构的规范还是需要遵循的,不要慌,问题不大!
废话不多讲,下面,我们就进入实战过程!
(1)既然是“多数据源”,那么得需要建立多个数据库,等待被访问。在这里,我们仍然沿用了“technology”数据库,并新建了一个新的数据库“sb_redis”(在里面建立了一张数据库表 sys_config),对该数据库表采用Mybatis逆向工程生成相应的Entity、Mapper、Mapper.xml即可。
相应的源代码、数据库大家检出来一看就行了!以下为该数据库表sys_config的DDL:
CREATE TABLE `sys_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '字典类型',
`name` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '字典名称',
`code` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '选项编码',
`value` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '选项取值',
`order_by` int(11) DEFAULT '1' COMMENT '排序',
`is_active` tinyint(4) DEFAULT '1' COMMENT '是否有效(1=是;0=否)',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_type_code` (`type`,`code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='字典配置表';
(2)在这里值得一提的是,“多数据源实战”也有一些要求,即“主数据源Primary”只能有一个,“从数据源Second…”可以有多个,类似于数据库集群的“Master-Slave”模式或者ZooKeeper集群的 “Leader-Follower”选举机制。