背景信息 #
异构双写 Java API 规则配置允许用户直接通过编写 Java 代码的方式,完成对象的创建,Java API 的配置方式非常灵活,不需要依赖额外的 jar 包 就能够集成各种类型的业务系统。
参数解释 #
配置入口 #
类名称:com.sphereex.dbplusengine.dualwrite.api.DualWriteRuleConfiguration
可配置属性:
名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
dataSources (+) | Collection<DualWriteDataSourceRuleConfiguration> | 双写数据源配置 | |
interceptors (+) | Map<String, AlgorithmConfiguration> | 拦截器算法名称和配置 | |
loadBalancers (+) | Map<String, AlgorithmConfiguration> | 负载均衡算法名称和配置 | |
keyGenerateStrategies (+) | Map<String, DualWriteKeyGenerateStrategyConfiguration> | 主键生成策略名称和配置 | |
keyGenerators (+) | Map<String, AlgorithmConfiguration> | 主键生成算法名称和配置 |
DualWriteDataSourceRuleConfiguration #
类名称:com.sphereex.dbplusengine.dualwrite.api.rule.DualWriteDataSourceRuleConfiguration
可配置属性:
名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
name | String | 双写数据源逻辑名称 | |
primaryDataSourceName | String | 主数据源(双写退化后以主数据为准,单写单读) | |
writeDataSourceNames | List | 写数据源 | |
readDataSourceNames | List | 读数据源 | |
interceptorName | String | 读流量拦截器,拦截的流量进行读负载均衡 | 默认拦截全部读流量 |
loadBalancerName | String | 读流量负载均衡算法 | 默认为 ROUND_ROBIN |
DualWriteKeyGenerateStrategyConfiguration #
类名称:com.sphereex.dbplusengine.dualwrite.api.keygen.DualWriteKeyGenerateStrategyConfiguration
可配置属性:
名称 | 数据类型 | 说明 | 默认值 |
---|---|---|---|
logicTable | String | 逻辑表名称 | |
keyGenerateColumn | String | 主键生成列名称 | |
keyGeneratorName | String | 主键生成算法名称 |
算法类型的详情,请参见内置算法 - 异构双写拦截器算法、内置算法 - 负载均衡算法 以及 内置算法 - 分布式序列算法。
操作步骤 #
- 创建真实数据源映射关系,key 为数据源逻辑名称,value 为 DataSource 对象;
- 创建脱敏规则对象 DualWriteRuleConfiguration,并初始化对象中的双写数据源配置 DualWriteDataSourceRuleConfiguration、主键生成策略配置 DualWriteKeyGenerateStrategyConfiguration 及拦截器算法、负载均衡算法、主键生成算法等参数;
配置示例 #
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Properties;
public final class DualWriteRuleConfiguration implements ExampleConfiguration {
@Override
public DataSource getDataSource() {
DualWriteRuleConfiguration ruleConfig = new DualWriteRuleConfiguration(
Collections.singleton(new DualWriteDataSourceRuleConfiguration("dual_write_ds", "oracle_ds", Collections.emptyList(), Collections.emptyList(), null, null)), Collections.emptyMap(),
Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap());
try {
return ShardingSphereDataSourceFactory.createDataSource(DataSourceUtil.createDataSource("dual_write_db"), Collections.singleton(ruleConfig), new Properties());
} catch (final SQLException ex) {
ex.printStackTrace();
return null;
}
}
}