简介
Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。
主要功能如下:
数据分片
读写分离
数据治理
柔性事务
在此主要使用读写分离, 其它功能介绍和使用见官网.
官网: http://shardingsphere.io/document/current/cn/overview/
git: https://github.com/sharding-sphere/sharding-sphere
作者: 张亮等, 当当架构总监
Sharding-JDBC
定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
适用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer和PostgreSQL。
基于SpringBoot2的配置
1. 引入依赖
<!-- sharding-jdbc --><dependency><groupId>io.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>3.0.0.M3</version></dependency>
2. 更改配置
# 删除spring数据源# 配置 sharding-jdbc 数据源sharding:jdbc:datasource:names: primary,secondary # 此处两个数据源之间逗号不能加空格primary:type: com.zaxxer.hikari.HikariDataSource # SpringBoot2 默认数据源类型jdbcUrl: jdbc:mysql://localhost:6446/ushare?useSSL=false # 变量名为 jdbcUrl, 不是urlusername: rootpassword: rootsecondary:type: com.zaxxer.hikari.HikariDataSourcejdbcUrl: jdbc:mysql://localhost:6447/ushare?useSSL=falseusername: rootpassword: rootconfig:masterslave:name: msmaster-data-source-name: primaryslave-data-source-names: secondary # 这里可配置多个props:sql:show: true
上述配置, 配合mysqlrouter和InnoDB cluster即可实现mysql集群的读写分离.
坑
1. 有些操作, 如select * … update, 会被默认走从库, 此时要强制走主库
在相关代码执行前添加:
// 走生成sequence, 强制走主库HintManager hintManager = HintManager.getInstance() ;hintManager.setMasterRouteOnly();
