简介

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. 引入依赖

  1. <!-- sharding-jdbc -->
  2. <dependency>
  3. <groupId>io.shardingsphere</groupId>
  4. <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
  5. <version>3.0.0.M3</version>
  6. </dependency>

2. 更改配置

  1. # 删除spring数据源
  2. # 配置 sharding-jdbc 数据源
  3. sharding:
  4. jdbc:
  5. datasource:
  6. names: primary,secondary # 此处两个数据源之间逗号不能加空格
  7. primary:
  8. type: com.zaxxer.hikari.HikariDataSource # SpringBoot2 默认数据源类型
  9. jdbcUrl: jdbc:mysql://localhost:6446/ushare?useSSL=false # 变量名为 jdbcUrl, 不是url
  10. username: root
  11. password: root
  12. secondary:
  13. type: com.zaxxer.hikari.HikariDataSource
  14. jdbcUrl: jdbc:mysql://localhost:6447/ushare?useSSL=false
  15. username: root
  16. password: root
  17. config:
  18. masterslave:
  19. name: ms
  20. master-data-source-name: primary
  21. slave-data-source-names: secondary # 这里可配置多个
  22. props:
  23. sql:
  24. show: true

上述配置, 配合mysqlrouter和InnoDB cluster即可实现mysql集群的读写分离.

1. 有些操作, 如select * … update, 会被默认走从库, 此时要强制走主库

在相关代码执行前添加:

  1. // 走生成sequence, 强制走主库
  2. HintManager hintManager = HintManager.getInstance() ;
  3. hintManager.setMasterRouteOnly();