一、关键组件说明
-
@EnableSharding
/ ShardingAutoConfiguration
:Spring Boot 自动配置入口。 -
ShardingSphereDataSource
:ShardingSphere 的入口 DataSource 实现。 -
ShardingRule
:分片规则配置核心。 -
ShardingSphereOptimizer
:SQL 优化器。 -
ShardingEngine
:分片 SQL 执行引擎。 -
SQLRouter
:SQL 分片路由器。
二、整体加载时序图

三、分阶段详细加载流程
阶段1:配置加载阶段(应用启动时)

关键步骤详解:
-
配置解析:
# application.yml 配置示例 spring: shardingsphere: datasource: names: ds0, ds1 ds0: # 实际数据源配置... ds1: # 实际数据源配置... rules: sharding: tables: t_order: actualDataNodes: ds${0..1}.t_order_${0..1} databaseStrategy: # 分库策略 tableStrategy: # 分表策略
-
规则构建:
-
解析
actualDataNodes
生成物理表映射。 -
初始化分片算法(精确、范围、复合分片等)。
-
阶段2:SQL 执行阶段(运行时)
路由阶段详细流程:
-
SQL 解析:将 SQL 解析为抽象语法树,识别查询类型、表名、条件等。
-
分片键提取:从 WHERE 条件中提取分片键值。
-
路由计算:根据分片算法确定目标数据源和表。
// 分片算法示例 String actualTable = "t_order_" + (userId % 2); // 分表 String actualDataSource = "ds" + (userId / 10 % 2); // 分库
-
SQL 改写:将逻辑表名替换为物理表名。
四、核心扩展点加载时序
1. 自定义分片算法加载

配置示例:
spring:
shardingsphere:
rules:
sharding:
shardingAlgorithms:
order-db-algorithm:
type: CLASS_BASED
props:
strategy: standard
algorithmClassName: com.example.OrderDatabaseShardingAlgorithm
2. 分布式序列生成器加载

五、Spring Boot 集成详细时序
自动配置类加载顺序:
-
ShardingSphereAutoConfiguration
:主配置类 -
ShardingSphereDataSourceConfiguration
:数据源配置 -
ShardingRuleConfiguration
:规则配置 -
PropertiesConfiguration
:属性配置
代码层面的加载调用栈:
// 1. Spring Boot启动
SpringApplication.run()
→ ShardingSphereAutoConfiguration
→ ShardingSphereDataSourceFactory.createDataSource()
→ YamlShardingSphereDataSourceFactory.createDataSource() // 解析YAML
→ ShardingSphereDataSource() // 创建数据源
→ ShardingRule() // 初始化分片规则
→ Metadata() // 元数据管理
六、常见问题定位时序
场景1:启动时报 Sharding rule configuration is invalid
-
时序定位:阶段1的第5步(规则验证)
-
检查点:
-
分片算法配置是否正确
-
实际数据节点映射是否存在
-
场景2:执行SQL时报 No database route info
-
时序定位:阶段2的第4步(路由计算)
-
检查点:
-
分片键是否包含在查询条件中
-
分片算法返回值是否在数据节点范围内
-
场景3:性能问题 Slow SQL
-
时序定位:阶段2的第7步(并行执行)
-
检查点:
-
是否产生笛卡尔积路由(需要优化分片策略)
-
结果归并是否内存溢出(大数据集分页优化)
-
七、关键配置参数影响时序
spring:
shardingsphere:
props:
# 影响阶段2的第2步:SQL解析缓存
sql-show: true
# 影响阶段2的第7步:最大连接数
max-connections-size-per-query: 1
# 影响阶段2的第8步:结果集归并方式
kernel-executor-size: 10
通过理解 ShardingSphere 的加载时序,可以更好地进行性能调优和问题排查!