代码结构
分为core、governance、spring三个模块,本次重点分析core模块,代码结构如下:
图中标记的为本次重点分析内容。
jdbc四大对象
shardingsphere提供俩种创建DataSource的方式,ShardingSphereDataSourceFactory和YamlShardingSphereDataSourceFactory。YamlShardingSphereDataSourceFactory内部还是调用ShardingSphereDataSourceFactory的createDataSource方法:
public static DataSource createDataSource(final Map<String, DataSource> dataSourceMap, final Collection<RuleConfiguration> configurations, final Properties props) throws SQLException {
return new ShardingSphereDataSource(dataSourceMap, configurations, props);
}
说明: 本文主要以 ShardingDataSource 为切入点分析 Sharding-Sphere 是如何对 JDBC 四大对象 DataSource、Connection、Statement、ResultSet 进行封装的。
DataSource
类结果如上图
ShardingSphereDataSource构造函数
public ShardingSphereDataSource(final Map<String, DataSource> dataSourceMap, final Collection<RuleConfiguration> configurations, final Properties props) throws SQLException {
metaDataContexts = new MetaDataContextsBuilder(
Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSourceMap), Collections.singletonMap(DefaultSchema.LOGIC_NAME, configurations), props).build();
String xaTransactionMangerType = metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
transactionContexts = createTransactionContexts(metaDataContexts.getDefaultMetaData().getResource().getDatabaseType(), dataSourceMap, xaTransactionMangerType);
}
dataSourceMap为解析出的ds集合,configurations为一些分片的规则,props为其他属性值。
接着往下看,持有MetaDataContexts元数据以及返回一个ShardingSphereConnection
private final MetaDataContexts metaDataContexts;
@Override
public ShardingSphereConnection getConnection() {
return new ShardingSphereConnection(getDataSourceMap(), metaDataContexts, transactionContexts, TransactionTypeHolder.get());
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。