Logo
异构双写

背景信息 #

异构双写 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

可配置属性:

名称数据类型说明默认值
nameString双写数据源逻辑名称
primaryDataSourceNameString主数据源(双写退化后以主数据为准,单写单读)
writeDataSourceNamesList写数据源
readDataSourceNamesList读数据源
interceptorNameString读流量拦截器,拦截的流量进行读负载均衡默认拦截全部读流量
loadBalancerNameString读流量负载均衡算法默认为 ROUND_ROBIN

DualWriteKeyGenerateStrategyConfiguration #

类名称:com.sphereex.dbplusengine.dualwrite.api.keygen.DualWriteKeyGenerateStrategyConfiguration

可配置属性:

名称数据类型说明默认值
logicTableString逻辑表名称
keyGenerateColumnString主键生成列名称
keyGeneratorNameString主键生成算法名称

算法类型的详情,请参见内置算法 - 异构双写拦截器算法内置算法 - 负载均衡算法 以及 内置算法 - 分布式序列算法

操作步骤 #

  1. 创建真实数据源映射关系,key 为数据源逻辑名称,value 为 DataSource 对象;
  2. 创建脱敏规则对象 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;
        }
    }
}