ShardingSphere-JDBC
# ShardingSphere-JDBC
# 概述
ShardingSphere-JDBC定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
- 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
- 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
- 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库。
# 主要功能
ShardingSphere-JDBC主要提供给开发者数据分片、分布式事务、数据库治理等功能。
- 数据分片:分库分表、读写分离、分片策略、分布式主键
- 分布式事务;标准化的事务接口、XA强一致性事务、柔性事务
- 数据库治理:配置动态化、编排和治理、数据脱敏、可视化链路追踪
这些功能都是配置化的,用官方的话就是:配置是 ShardingSphere-JDBC 中唯一与应用开发者交互的模块。在我们使用ShardingSphere-JDBC的时候参考官方开发者使用手册 (opens new window)即可,不用死记硬背。
# 内部结构
ShardingSphere-JDBC主要内部结构,如下图:
- 图中黄色部分表示的是Sharding-JDBC的入口API,采用工厂方法的形式提供。 目前有
ShardingDataSourceFactory
和MasterSlaveDataSourceFactory
两个工厂类。- ShardingDataSourceFactory:支持分库分表、读写分离操作
- MasterSlaveDataSourceFactory:支持读写分离操作
- 图中蓝色部分表示的是Sharding-JDBC的配置对象,提供灵活多变的配置方式。
- ShardingRuleConfiguration:是分库分表配置的核心和入口,它可以包含多个TableRuleConfiguration和MasterSlaveRuleConfiguration(LinkedList)。
- MasterSlaveRuleConfiguration:封装的是读写分离配置信息。
- TableRuleConfiguration:封装的是表的分片配置信息,有5种配置形式对应不同的Configuration类型。
- 1.StandardShardingStrategyConfiguration:标准分片策略配置
- 2.ComplexShardingStrategyConfiguration:复合分片策略配置
- 3.HintShardingStrategyConfiguration:Hint 分片策略配置
- 4.InlineShardingStrategyConfiguration:Inline分片策略配置
- 5.NoneShardingStrategyConfiguration:不分片策略配置
- 图中红色部分表示的是内部对象,由Sharding-JDBC内部使用,应用开发者无需关注。
- ShardingJDBC通过ShardingRuleConfiguration和MasterSlaveRuleConfiguration生成真正供ShardingDataSource和MasterSlaveDataSource使用的规则对象。
- ShardingDataSource和MasterSlaveDataSource实现了DataSource接口,是JDBC的完整实现方案。
# 初始化流程
- 根据配置的信息生成Configuration对象
- 通过Factory会将Configuration对象转化为Rule对象
- 通过Factory会将Rule对象与DataSource对象封装
- Sharding-JDBC使用DataSource进行分库分表和读写分离操作
# 使用过程
# 引入maven依赖
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core</artifactId>
<version>${latest.release.version}</version>
</dependency>
注意: 请将${latest.release.version}更改为实际的版本号。
# 规则配置
ShardingSphere-JDBC 可以通过 Java
,YAML
,Spring 命名空间
和 Spring Boot Starter
这 4 种方式进行配置,开发者可根据场景选择适合的配置方式。 详情请参见用户手册 (opens new window)。
# 创建DataSource
通过 ShardingSphereDataSourceFactory
工厂和规则配置对象获取 ShardingSphereDataSource
。 该对象实现自 JDBC 的标准 DataSource 接口,可用于原生 JDBC 开发,或使用 JPA, Hibernate, MyBatis 等 ORM 类库。
DataSource dataSource = ShardingSphereDataSourceFactory.createDataSource(schemaName, modeConfig, dataSourceMap, ruleConfigs, props);
# 常见配置
这里记录YAML的配置方式,其他见请参见用户手册 (opens new window)。
# 模式
mode (?): # 不配置则默认内存模式
type: # 运行模式类型。可选配置:Memory、Standalone、Cluster
repository (?): # 久化仓库配置。Memory 类型无需持久化
overwrite: # 是否使用本地配置覆盖持久化配置
# 数据源配置
dataSources: # 数据源配置,可配置多个 <data-source-name>
<data-source-name>: # 数据源名称
dataSourceClassName: # 数据源完整类名
driverClassName: # 数据库驱动类名,以数据库连接池自身配置为准
jdbcUrl: # 数据库 URL 连接,以数据库连接池自身配置为准
username: # 数据库用户名,以数据库连接池自身配置为准
password: # 数据库密码,以数据库连接池自身配置为准
# ... 数据库连接池的其它属性
上次更新: 5/30/2023, 11:42:20 PM