代码结构


分为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());
}

金鑫
1 声望0 粉丝

下一篇 »
Druid 中的filter