sharding-sphere是强大的读写分离、分表分库中间件,sharding-jdbc是sharding-sphere的核心模块。官方网站

springboot项目中集成sharding-jdbc也非常简单。

首先,引入sharding-jdbc和druid的jar包:

io.shardingsphere

sharding-jdbc-spring-boot-starter

${sharding-sphere.version}

io.shardingsphere

sharding-jdbc-spring-namespace

${sharding-sphere.version}

com.alibaba

druid

1.1.13

在properties或者yml中配置读写分离:

sharding.jdbc.datasource.names=master,slave0,slave1

sharding.jdbc.datasource.master.type=com.alibaba.druid.pool.DruidDataSource

sharding.jdbc.datasource.master.driver-class=com.mysql.cj.jdbc.Driver

sharding.jdbc.datasource.master.url=xxx

sharding.jdbc.datasource.master.username=xxx

sharding.jdbc.datasource.master.password=xxx

sharding.jdbc.datasource.master.max-active=100

sharding.jdbc.datasource.master.min-idle=10

sharding.jdbc.datasource.master.initial-size=10

sharding.jdbc.datasource.master.test-on-borrow=true

sharding.jdbc.datasource.slave0.type=com.alibaba.druid.pool.DruidDataSource

sharding.jdbc.datasource.slave0.driver-class=com.mysql.cj.jdbc.Driver

sharding.jdbc.datasource.slave0.url=xx

sharding.jdbc.datasource.slave0.username=xx

sharding.jdbc.datasource.slave0.password=xx

sharding.jdbc.datasource.slave0.max-active=100

sharding.jdbc.datasource.slave0.min-idle=10

sharding.jdbc.datasource.slave0.initial-size=10

sharding.jdbc.datasource.slave0.test-on-borrow=true

sharding.jdbc.datasource.slave1.type=com.alibaba.druid.pool.DruidDataSource

sharding.jdbc.datasource.slave1.driver-class=com.mysql.cj.jdbc.Driver

sharding.jdbc.datasource.slave1.url=xx

sharding.jdbc.datasource.slave1.username=xx

sharding.jdbc.datasource.slave1.password=xx

sharding.jdbc.datasource.slave1.max-active=100

sharding.jdbc.datasource.slave1.min-idle=10

sharding.jdbc.datasource.slave1.initial-size=10

sharding.jdbc.datasource.slave1.test-on-borrow=true

sharding.jdbc.config.masterslave.name=ds-ms

sharding.jdbc.config.masterslave.master-data-source-name=master

sharding.jdbc.config.masterslave.slave-data-source-names=slave0,slave1

注意这段配置,除了前缀,后面部分都是druid连接池相关的参数。所以,如果你使用的不是 druid连接池,那么后面的参数也要根据连接池属性做相应的变更。

当然,如果你想配置更多连接池属性,也可以继续添加配置。

到这里,读写分离的配置就完成了,读写分离的功能已经实现了。具体什么情况下走master,什么情况下走slave,根据我的测试,直接写结论吧。

sharding-jdbc是根据sql类型决定在master或者slave上面执行的,跟事务没关系

同一个方法中,遇到dml语句,那么该语句和其后面的所有sql都会在主库执行

查询sql默认会走slave库,但是一旦遇到dml语句,就会设置一个查询主库的标志,而这个对象是存在ThreadLocal中的,所以,其后的所以sql都会在主库执行。

强制读主

有些情况下,查询语句需要强制在master上执行,可以通过代码实现:

Object result;

HintManager hintManager = HintManager.getInstance();

hintManager.setMasterRouteOnly();

try {

result = xxxxx;

} finally {

hintManager.close();

}

return result;

为了方便,我们可以通过aop和自定注解实现这一功能:

// 定义注解

@Inherited

@Target(ElementType.METHOD)

@Retention(RetentionPolicy.RUNTIME)

public @interface MasterRoute {

//

}

// 定义aop

@Aspect

@Slf4j

@Component

public class MasterRouteAspect {

@Around(value = "@annotation(me.heys.anno.MasterRoute)")

public Object readMaster(ProceedingJoinPoint joinPoint) throws Throwable {

Object result;

HintManager hintManager = HintManager.getInstance();

hintManager.setMasterRouteOnly();

try {

result = joinPoint.proceed();

} finally {

hintManager.close();

}

return result;

}

}

sharding-jdbc更多用于分表分库,用它只进行读写分离,有点杀鸡用牛刀的感觉。后面会介绍如何通过mysql的驱动实现读写分离。

原文:https://www.cnblogs.com/ahhyong/p/10405889.html

mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc相关推荐

  1. php解决mysql主从同步_Mysql读写分离,主从同步实现

    随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,因此我们可以通过实现数据库的读写分离来提高系统的性能. 通过设置主从数据库实现读写分离,主库负责"写"操作,从库负责&qu ...

  2. mysql dal层_MySQL读写分离的DAL层策略设计

    MySQL读写分离的DAL层策略设计 MySQL读写分离的DAL层策略设计 一 .MySQL集群简介 所谓的mysql集群,是指多台机器完成一个工作,最主要的场景是数据库服务器和Web服务器,但是集群 ...

  3. 【纯干货】Amoeba实现MySQL主从同步与读写分离

    [纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...

  4. MySQL之——MSS主从复制(读写分离)实现

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52746393 前面,在博文<MySQL之--MS主从复制(读写分离)实现&g ...

  5. (含PPT)MySQL托管服务架构及读写分离的优化

    关注我们获得更多内容 内容来源:2017 年 08 月 24 日,微软中国首席产品经理宋青见在"ODF 2017开源数据库论坛(北京)"进行<云原生的MySQL托管服务架构及 ...

  6. MySQL高可用和读写分离

    MySQL 高可用和读写分离 文章目录 MySQL 高可用和读写分离 一.从单机到集群 1.1 单机MySQL数据库到几个问题 1.2 单机MySQL到技术演进 二.MySQL的主从复制 2.1 核心 ...

  7. MySQL 案例实战--MySQL 基于Mycat实现读写分离

    MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...

  8. 【MySql】mysql之主从复制和读写分离搭建

    [MySql]mysql之主从复制和读写分离搭建 文章目录 [MySql]mysql之主从复制和读写分离搭建 1主从复制 1.1MySql支持从复制类型 1.2主从复制的原理 1.3主从复制的工作过程 ...

  9. MySQL数据库主从复制与读写分离(图文详解!)

    目录 前言 一:MySQL数据库主从复制与读写分离 1.什么是读写分离? 2.为什么要读写分离呢? 3.什么时候要读写分离? 4.主从复制与读写分离 5.mysql支持的复制类型 (1)STATEME ...

最新文章

  1. 从0开始的Python学习001快速上手手册
  2. How to add and configure jetty server in maven pom.xml
  3. 您如何计算字符串中字符串(实际上是字符)的出现?
  4. 条件变量为什么要和互斥锁一起用
  5. 做了表分区以后的数据库表,在使用程序进行修改操作时报异常。
  6. J2ME手游开发日记
  7. ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
  8. dmesg的时间戳转换为对应的时间
  9. 爬虫案例:利用python爬虫关键词批量下载高清大图
  10. tplink软件升级有用吗_TP-LINK路由器升级方法 | 吴文辉博客
  11. XML安全之Web Services
  12. Androidstudio svn 使用 版本控制 详细步骤(一)
  13. 诚之和:苹果汽车还没造出来,但数百万车将先装上它的“灵魂”
  14. javascript动态生成表格 -- 案例
  15. ubuntu中安装pdf虚拟打印机
  16. 怎么下载Windows图片和传真查看器
  17. 自制StartUp宏病毒专杀小工具
  18. 浅谈几个倾斜摄影三维模型的修补软件
  19. java 获取远程服务器信息,java 远程获取服务器信息
  20. java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...

热门文章

  1. Solr查询参数sort(排序)
  2. Android程序员视角的Apple发布会
  3. 关于iOS 'The sandbox is not sync with the Podfile.lock'问题解决方法
  4. Java面向对象之成员变量的初始值、object类与对象
  5. layui生产管理系统_ssm开发生产制造业MES系统源码
  6. Android内容提供器的应用,基于Android的智能终端应用防护系统短信过滤子模块的设计与实现...
  7. Python语言常用的49个基本概念及含义
  8. Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码
  9. Python“制作”midi音乐“两只老虎”
  10. android+adb+push到系统下,Android adb push 应用到app/system