mysql sharding 读取_MySQL读写分离(一)——sharding-jdbc
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相关推荐
- php解决mysql主从同步_Mysql读写分离,主从同步实现
随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,因此我们可以通过实现数据库的读写分离来提高系统的性能. 通过设置主从数据库实现读写分离,主库负责"写"操作,从库负责&qu ...
- mysql dal层_MySQL读写分离的DAL层策略设计
MySQL读写分离的DAL层策略设计 MySQL读写分离的DAL层策略设计 一 .MySQL集群简介 所谓的mysql集群,是指多台机器完成一个工作,最主要的场景是数据库服务器和Web服务器,但是集群 ...
- 【纯干货】Amoeba实现MySQL主从同步与读写分离
[纯干货]Amoeba实现MySQL主从同步与读写分离 一.简介 amoeba简介 Amoeba(变形虫)项目,该开源框架于2008年开始发布一款 Amoeba for Mysql软件.这个软件致力于 ...
- MySQL之——MSS主从复制(读写分离)实现
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/52746393 前面,在博文<MySQL之--MS主从复制(读写分离)实现&g ...
- (含PPT)MySQL托管服务架构及读写分离的优化
关注我们获得更多内容 内容来源:2017 年 08 月 24 日,微软中国首席产品经理宋青见在"ODF 2017开源数据库论坛(北京)"进行<云原生的MySQL托管服务架构及 ...
- MySQL高可用和读写分离
MySQL 高可用和读写分离 文章目录 MySQL 高可用和读写分离 一.从单机到集群 1.1 单机MySQL数据库到几个问题 1.2 单机MySQL到技术演进 二.MySQL的主从复制 2.1 核心 ...
- MySQL 案例实战--MySQL 基于Mycat实现读写分离
MySQL 基于Mycat实现读写分离 前言 一.什么是读写分离? 二.MySQL 读写分离解决方案 三.MySQL 基于Mycat实现读写分离 四.Mycat-web 管理部署 前言 本环境是基于 ...
- 【MySql】mysql之主从复制和读写分离搭建
[MySql]mysql之主从复制和读写分离搭建 文章目录 [MySql]mysql之主从复制和读写分离搭建 1主从复制 1.1MySql支持从复制类型 1.2主从复制的原理 1.3主从复制的工作过程 ...
- MySQL数据库主从复制与读写分离(图文详解!)
目录 前言 一:MySQL数据库主从复制与读写分离 1.什么是读写分离? 2.为什么要读写分离呢? 3.什么时候要读写分离? 4.主从复制与读写分离 5.mysql支持的复制类型 (1)STATEME ...
最新文章
- 从0开始的Python学习001快速上手手册
- How to add and configure jetty server in maven pom.xml
- 您如何计算字符串中字符串(实际上是字符)的出现?
- 条件变量为什么要和互斥锁一起用
- 做了表分区以后的数据库表,在使用程序进行修改操作时报异常。
- J2ME手游开发日记
- ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
- dmesg的时间戳转换为对应的时间
- 爬虫案例:利用python爬虫关键词批量下载高清大图
- tplink软件升级有用吗_TP-LINK路由器升级方法 | 吴文辉博客
- XML安全之Web Services
- Androidstudio svn 使用 版本控制 详细步骤(一)
- 诚之和:苹果汽车还没造出来,但数百万车将先装上它的“灵魂”
- javascript动态生成表格 -- 案例
- ubuntu中安装pdf虚拟打印机
- 怎么下载Windows图片和传真查看器
- 自制StartUp宏病毒专杀小工具
- 浅谈几个倾斜摄影三维模型的修补软件
- java 获取远程服务器信息,java 远程获取服务器信息
- java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...
热门文章
- Solr查询参数sort(排序)
- Android程序员视角的Apple发布会
- 关于iOS 'The sandbox is not sync with the Podfile.lock'问题解决方法
- Java面向对象之成员变量的初始值、object类与对象
- layui生产管理系统_ssm开发生产制造业MES系统源码
- Android内容提供器的应用,基于Android的智能终端应用防护系统短信过滤子模块的设计与实现...
- Python语言常用的49个基本概念及含义
- Python版课堂管理系统中使用UDP广播远程关闭客户端程序思路与源码
- Python“制作”midi音乐“两只老虎”
- android+adb+push到系统下,Android adb push 应用到app/system