简介
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, 不是url
username: root
password: root
secondary:
type: com.zaxxer.hikari.HikariDataSource
jdbcUrl: jdbc:mysql://localhost:6447/ushare?useSSL=false
username: root
password: root
config:
masterslave:
name: ms
master-data-source-name: primary
slave-data-source-names: secondary # 这里可配置多个
props:
sql:
show: true
上述配置, 配合mysqlrouter和InnoDB cluster即可实现mysql集群的读写分离.
坑
1. 有些操作, 如select * … update, 会被默认走从库, 此时要强制走主库
在相关代码执行前添加:
// 走生成sequence, 强制走主库
HintManager hintManager = HintManager.getInstance() ;
hintManager.setMasterRouteOnly();