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

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("masterD

你可能感兴趣的:(druid,mysql读写分离)