# sharding-db **Repository Path**: wei-echo/sharding-db ## Basic Information - **Project Name**: sharding-db - **Description**: 分库分表解决方案 sharding jdbc for db - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-08-15 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分库分表解决方案 sharding jdbc for db [![GitHub release](https://img.shields.io/github/v/release/weiecho/sharding-db)](https://github.com/weiecho/sharding-db/releases) [![Maven Central Repo](https://img.shields.io/maven-central/v/cn.weiecho/sharding-db)](https://mvnrepository.com/artifact/cn.weiecho/sharding-db) [![openjdk](https://img.shields.io/badge/jdk-v1.8%2B-red)](http://openjdk.java.net) [![License](https://img.shields.io/github/license/weiecho/sentinel-client)](https://opensource.org/licenses/Apache-2.0) > >ShardingSphere是开源的分布式数据库中间件解决方案组成的生态圈,由Sharding-jdbc、Sharding-Proxy等组成,提供标准化的数据分片、安全控制、分布式事务和数据库治理功能,本文主要介绍sharding-db在项目中的使用。 > >Sharding-db是对Sharding-jdbc的功能封装,方便功能的对接,统一项目团队对数据源的对接 > 项目地址:[sharding-db](https://github.com/weiecho/sharding-db) ![Sharding-jdbc分片过程](https://images.gitee.com/uploads/images/2021/0815/070752_7b144da0_1313247.png "Sharding-jdbc分片过程") Sharding-jdbc根据SQL语句进行词语解析,上下文匹配数据库和表的分片策略生成路由路径,将分表配置中的逻辑库表改写为真实库表SQL语句,发送到底层数据源执行,将从各个数据节点获取的多数据结果集,组合成为一个结果集并正确的返回至请求客户端。 POM配置 ```xml cn.weiecho sharding-db 1.0.3 ``` ### Database配置 ```java //单数据源模式 @Configuration public class DatabaseConfig extends DatabaseSingletonConfigurator { } //主从数据源模式 @Configuration public class DatabaseConfig extends DatabaseMasterSlaveConfigurator { } //分表数据源模式 @Configuration public class DatabaseConfig extends DatabaseShardingConfigurator { } ``` ### 配置文件 ```xml sharding.jdbc: default-data-source-name: ms_ds_0 data-sources: ds_master: driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://127.0.0.1:3306/test_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull username: root password: root initial-size: 1 minimum-idle: 3 maximum-pool-size: 20 idle-timeout: 60000 max-lifetime: 180000 connection-test-query: select 1 test-while-idle: true test-on-borrow: true connection-init-sql: set names utf8mb4 ds_slave: driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource jdbc-url: jdbc:mysql://127.0.0.1:3307/test_db?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull username: root password: root initial-size: 1 minimum-idle: 3 maximum-pool-size: 20 idle-timeout: 60000 max-lifetime: 180000 connection-test-query: select 1 test-while-idle: true test-on-borrow: true connection-init-sql: set names utf8mb4 master-slave-rules: - name: ms_ds_0 master-data-source-name: ds_master slave-data-source-names: ds_slave load-balance-strategy: round_robin ``` ### 分表策略配置 重写DatabaseShardingConfigurator 的分表策略实现相关功能 ```java /** * 配置分表策略TableRule */ public Collection tableRuleConfigs() { return Collections.emptyList(); } /** * 配置绑定表分组BindingTable * 关联多表查询的时候避免笛卡尔积的组合出现 */ public Collection bindingTableGroups() { return Collections.emptyList(); } ``` ### 数据安全配置(脱敏) 敏感数据脱敏,重写DatabaseShardingConfigurator的加密规则实现相关功能 ```java /** * 数据脱敏策略EncryptRule */ public EncryptRuleConfiguration encryptRuleConfig() { return null; } ``` ### 广播表策略 用于数据源分片下,每个数据源都保存相同表全量数据,如字典表,配置表等 ```java /** * 配置广播表列表BroadcastTables * */ public Collection broadcastTables() { return Collections.emptyList(); } ``` ### 强制路由至主库 ```java HintManager hintManager = HintManager.getInstance(); hintManager.setMasterRouteOnly(); ``` 推荐使用try with resource方式 ```java try (HintManager hintManager = HintManager.getInstance()) { hintManager.setMasterRouteOnly(); } ``` ### 强制路由至指定读库 ```java HintManager hintManager = HintManager.getInstance(); hintManager.setDatabaseShardingValue(1); ``` 推荐使用try with resource方式 ```java try (HintManager hintManager = HintManager.getInstance()) { hintManager.setDatabaseShardingValue(1); } ```