druid mysql读写分离_Spring Boot + Mybatis + Druid 实现MySQL一主多从读写分离

本文介绍了如何使用Spring Boot、Mybatis和Druid实现MySQL的读写分离。通过扩展Spring的AbstractRoutingDataSource,动态切换数据源。创建了主从数据库,并在代码中配置了动态数据源、事务管理和MyBatis的集成。测试结果显示,读操作从从库进行,写操作则连接主库,实现了数据库的读写分离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Boot 读写分离实现

原理

实现方式主要是通过扩展Spring AbstractRoutingDataSource

这个类充当DataSource路由中介,在运行当中根据自定义KEY值动态切换正真的DataSource。

具体实现

创建测试库、表:

create database `mytest_db`;

CREATE TABLE `t_user` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`username` varchar(32) NOT NULL DEFAULT '' COMMENT '用户名',

`password` varchar(32) NOT NULL DEFAULT '' COMMENT '密码',

`email` varchar(64) NOT NULL DEFAULT '' COMMENT '邮箱',

`mobile` varchar(16) NOT NULL DEFAULT '' COMMENT '手机号',

`sex` tinyint(1) NOT NULL DEFAULT '1' COMMENT '性别 0 女 1男',

`point` int(11) NOT NULL DEFAULT '0' COMMENT '用户积分',

`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`last_update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

;

Spring DataSource 配置:

刚开始使用全注解版实现DataSource配置,后面发现需要增加从库还需要改代码,最终选择了使用配置文件。注解版后面我也会贴出来。

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

...省略

...省略

...省略

slave1

slave2

注解版数据源配置

/**

* 多数据源配置,此方式省去配置文件,但灵活性不够

* Created by rain.wen on 2017/7/31.

*/

@Configuration

public class DataSourceConfiguration {

@Bean(name = "masterDataSource", destroyMethod = "close", initMethod = "init")

[@Primary](https://my.oschina.net/primary) // 这个注解表示主数据源

@ConfigurationProperties(prefix = "druid.datasource")

public DataSource datasource() {

return new DruidDataSource();

}

@Bean(name = "slaveDataSource", destroyMethod = "close", initMethod = "init")

@ConfigurationProperties(prefix = "druid.datasource2")

public DataSource datasource2() {

return new DruidDataSource();

}

/**

* 构建动态数据源

* @param masterDataSource

* @param slaveDataSource

* @return

*/

@Bean

public DynamicDataSource dynamicDataSource(@Qualifier("masterDataSource") DataSource masterDataSource,

@Qualifier("slaveDataSource") DataSource slaveDataSource) {

DynamicDataSource dynamicDataSource = new DynamicDataSource(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值