Sharding-JDBC-Java配置

JAVA配置

配置示例

數(shù)據(jù)分片

     DataSource getShardingDataSource() throws SQLException {
         ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
         shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
         shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
         shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
         shardingRuleConfig.getBroadcastTables().add("t_config");
         shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}"));
         shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new ModuloShardingTableAlgorithm()));
         return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig);
     }

     private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {
             KeyGeneratorConfiguration result = new KeyGeneratorConfiguration();
             result.setColumn("order_id");
             return result;
     }

     TableRuleConfiguration getOrderTableRuleConfiguration() {
         TableRuleConfiguration result = new TableRuleConfiguration();
         result.setLogicTable("t_order");
         result.setActualDataNodes("ds${0..1}.t_order${0..1}");
         result.setKeyGeneratorConfig(getKeyGeneratorConfiguration());
         return result;
     }

     TableRuleConfiguration getOrderItemTableRuleConfiguration() {
         TableRuleConfiguration result = new TableRuleConfiguration();
         result.setLogicTable("t_order_item");
         result.setActualDataNodes("ds${0..1}.t_order_item${0..1}");
         return result;
     }

     Map<String, DataSource> createDataSourceMap() {
         Map<String, DataSource> result = new HashMap<>();
         result.put("ds0", DataSourceUtil.createDataSource("ds0"));
         result.put("ds1", DataSourceUtil.createDataSource("ds1"));
         return result;
     }

讀寫分離

     DataSource getMasterSlaveDataSource() throws SQLException {
         MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration();
         masterSlaveRuleConfig.setName("ds_master_slave");
         masterSlaveRuleConfig.setMasterDataSourceName("ds_master");
         masterSlaveRuleConfig.setSlaveDataSourceNames(Arrays.asList("ds_slave0", "ds_slave1"));
         return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(), masterSlaveRuleConfig, new LinkedHashMap<String, Object>(), new Properties());
     }

     Map<String, DataSource> createDataSourceMap() {
         Map<String, DataSource> result = new HashMap<>();
         result.put("ds_master", DataSourceUtil.createDataSource("ds_master"));
         result.put("ds_slave0", DataSourceUtil.createDataSource("ds_slave0"));
         result.put("ds_slave1", DataSourceUtil.createDataSource("ds_slave1"));
         return result;
     }

數(shù)據(jù)分片 + 讀寫分離

    DataSource getDataSource() throws SQLException {
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
        shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
        shardingRuleConfig.getBroadcastTables().add("t_config");
        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new StandardShardingStrategyConfiguration("user_id", new ModuloShardingDatabaseAlgorithm()));
        shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new ModuloShardingTableAlgorithm()));
        shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());
        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new HashMap<String, Object>(), new Properties());
    }

    private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {
                 KeyGeneratorConfiguration result = new KeyGeneratorConfiguration();
                 result.setColumn("order_id");
                 return result;
    }

    TableRuleConfiguration getOrderTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();
        result.setLogicTable("t_order");
        result.setActualDataNodes("ds_${0..1}.t_order_${[0, 1]}");
        result.setKeyGeneratorConfig(getKeyGeneratorConfiguration());
        return result;
    }

    TableRuleConfiguration getOrderItemTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration();
        result.setLogicTable("t_order_item");
        result.setActualDataNodes("ds_${0..1}.t_order_item_${[0, 1]}");
        return result;
    }

    List<MasterSlaveRuleConfiguration> getMasterSlaveRuleConfigurations() {
        MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration("ds_0", "demo_ds_master_0", Arrays.asList("demo_ds_master_0_slave_0", "demo_ds_master_0_slave_1"));
        MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration("ds_1", "demo_ds_master_1", Arrays.asList("demo_ds_master_1_slave_0", "demo_ds_master_1_slave_1"));
        return Lists.newArrayList(masterSlaveRuleConfig1, masterSlaveRuleConfig2);
    }

    Map<String, DataSource> createDataSourceMap() {
        final Map<String, DataSource> result = new HashMap<>();
        result.put("demo_ds_master_0", DataSourceUtil.createDataSource("demo_ds_master_0"));
        result.put("demo_ds_master_0_slave_0", DataSourceUtil.createDataSource("demo_ds_master_0_slave_0"));
        result.put("demo_ds_master_0_slave_1", DataSourceUtil.createDataSource("demo_ds_master_0_slave_1"));
        result.put("demo_ds_master_1", DataSourceUtil.createDataSource("demo_ds_master_1"));
        result.put("demo_ds_master_1_slave_0", DataSourceUtil.createDataSource("demo_ds_master_1_slave_0"));
        result.put("demo_ds_master_1_slave_1", DataSourceUtil.createDataSource("demo_ds_master_1_slave_1"));
        return result;
    }

數(shù)據(jù)分片 + 數(shù)據(jù)脫敏

    public DataSource getDataSource() throws SQLException {
        ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
        shardingRuleConfig.getTableRuleConfigs().add(getOrderTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration());
        shardingRuleConfig.getTableRuleConfigs().add(getOrderEncryptTableRuleConfiguration());
        shardingRuleConfig.getBindingTableGroups().add("t_order, t_order_item");
        shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "demo_ds_${user_id % 2}"));
        shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new PreciseModuloShardingTableAlgorithm()));
        shardingRuleConfig.setEncryptRuleConfig(getOrderEncryptRuleConfiguration());
        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new Properties());
    }

    private static TableRuleConfiguration getOrderTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration("t_order", "demo_ds_${0..1}.t_order_${[0, 1]}");
        result.setKeyGeneratorConfig(getKeyGeneratorConfiguration());
        return result;
    }

    private static TableRuleConfiguration getOrderItemTableRuleConfiguration() {
        TableRuleConfiguration result = new TableRuleConfiguration("t_order_item", "demo_ds_${0..1}.t_order_item_${[0, 1]}");
        result.setEncryptorConfig(new EncryptorConfiguration("MD5", "status", new Properties()));
        return result;
    }

    private static EncryptRuleConfiguration getOrderEncryptRuleConfiguration() {
        EncryptRuleConfiguration encryptRuleConfiguration = new EncryptRuleConfiguration();
        Properties properties = new Properties();
        properties.setProperty("aes.key.value", "123456");
        EncryptorRuleConfiguration encryptorRuleConfiguration = new EncryptorRuleConfiguration("AES", "t_order.order_id", properties);
        encryptRuleConfiguration.getEncryptorRuleConfigs().put("user_encryptor", encryptorRuleConfiguration);
    }

    private static Map<String, DataSource> createDataSourceMap() {
        Map<String, DataSource> result = new HashMap<>();
        result.put("demo_ds_0", DataSourceUtil.createDataSource("demo_ds_0"));
        result.put("demo_ds_1", DataSourceUtil.createDataSource("demo_ds_1"));
        return result;
    }

    private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {
        return new KeyGeneratorConfiguration("SNOWFLAKE", "order_id", new Properties());
    }

治理

    DataSource getDataSource() throws SQLException {
        return OrchestrationShardingDataSourceFactory.createDataSource(
                createDataSourceMap(), createShardingRuleConfig(), new HashMap<String, Object>(), new Properties(), 
                new OrchestrationConfiguration("orchestration-sharding-data-source", getRegistryCenterConfiguration(), false));
    }

    private RegistryCenterConfiguration getRegistryCenterConfiguration() {
        RegistryCenterConfiguration regConfig = new RegistryCenterConfiguration();
        regConfig.setServerLists("localhost:2181");
        regConfig.setNamespace("sharding-sphere-orchestration");
        return regConfig;
    }

配置項(xiàng)說明

數(shù)據(jù)分片

ShardingDataSourceFactory

數(shù)據(jù)分片的數(shù)據(jù)源創(chuàng)建工廠。

名稱 數(shù)據(jù)類型 說明
dataSourceMap Map<String, DataSource> 數(shù)據(jù)源配置
shardingRuleConfig ShardingRuleConfiguration 數(shù)據(jù)分片配置規(guī)則
props (?) Properties 屬性配置

ShardingRuleConfiguration

分片規(guī)則配置對(duì)象。

名稱 數(shù)據(jù)類型 說明
tableRuleConfigs Collection<TableRuleConfiguration> 分片規(guī)則列表
bindingTableGroups (?) Collection<String> 綁定表規(guī)則列表
broadcastTables (?) Collection<String> 廣播表規(guī)則列表
defaultDataSourceName (?) String 未配置分片規(guī)則的表將通過默認(rèn)數(shù)據(jù)源定位
defaultDatabaseShardingStrategyConfig (?) ShardingStrategyConfiguration 默認(rèn)分庫策略
defaultTableShardingStrategyConfig (?) ShardingStrategyConfiguration 默認(rèn)分表策略
defaultKeyGeneratorConfig (?) KeyGeneratorConfiguration 默認(rèn)自增列值生成器配置,缺省將使用org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator
masterSlaveRuleConfigs (?) Collection<MasterSlaveRuleConfiguration> 讀寫分離規(guī)則,缺省表示不使用讀寫分離

TableRuleConfiguration

表分片規(guī)則配置對(duì)象。

名稱 數(shù)據(jù)類型 說明
logicTable String 邏輯表名稱
actualDataNodes (?) String 由數(shù)據(jù)源名 + 表名組成,以小數(shù)點(diǎn)分隔。多個(gè)表以逗號(hào)分隔,支持inline表達(dá)式。缺省表示使用已知數(shù)據(jù)源與邏輯表名稱生成數(shù)據(jù)節(jié)點(diǎn)。用于廣播表(即每個(gè)庫中都需要一個(gè)同樣的表用于關(guān)聯(lián)查詢,多為字典表)或只分庫不分表且所有庫的表結(jié)構(gòu)完全一致的情況
databaseShardingStrategyConfig (?) ShardingStrategyConfiguration 分庫策略,缺省表示使用默認(rèn)分庫策略
tableShardingStrategyConfig (?) ShardingStrategyConfiguration 分表策略,缺省表示使用默認(rèn)分表策略
logicIndex (?) String 邏輯索引名稱,對(duì)于分表的Oracle/PostgreSQL數(shù)據(jù)庫中DROP INDEX XXX語句,需要通過配置邏輯索引名稱定位所執(zhí)行SQL的真實(shí)分表
keyGeneratorConfig (?) KeyGeneratorConfiguration 自增列值生成器配置,缺省表示使用默認(rèn)自增主鍵生成器
encryptorConfiguration (?) EncryptorConfiguration 加解密生成器配置

StandardShardingStrategyConfiguration

ShardingStrategyConfiguration的實(shí)現(xiàn)類,用于單分片鍵的標(biāo)準(zhǔn)分片場(chǎng)景。

名稱 數(shù)據(jù)類型 說明
shardingColumn String 分片列名稱
preciseShardingAlgorithm PreciseShardingAlgorithm 精確分片算法,用于=和IN
rangeShardingAlgorithm (?) RangeShardingAlgorithm 范圍分片算法,用于BETWEEN

ComplexShardingStrategyConfiguration

ShardingStrategyConfiguration的實(shí)現(xiàn)類,用于多分片鍵的復(fù)合分片場(chǎng)景。

名稱 數(shù)據(jù)類型 說明
shardingColumns String 分片列名稱,多個(gè)列以逗號(hào)分隔
shardingAlgorithm ComplexKeysShardingAlgorithm 復(fù)合分片算法

InlineShardingStrategyConfiguration

ShardingStrategyConfiguration的實(shí)現(xiàn)類,用于配置行表達(dá)式分片策略。

名稱 數(shù)據(jù)類型 說明
shardingColumn String 分片列名稱
algorithmExpression String 分片算法行表達(dá)式,需符合groovy語法,詳情請(qǐng)參考行表達(dá)式

HintShardingStrategyConfiguration

ShardingStrategyConfiguration的實(shí)現(xiàn)類,用于配置Hint方式分片策略。

名稱 數(shù)據(jù)類型 說明
shardingAlgorithm HintShardingAlgorithm Hint分片算法

NoneShardingStrategyConfiguration

ShardingStrategyConfiguration的實(shí)現(xiàn)類,用于配置不分片的策略。

KeyGeneratorConfiguration

名稱 數(shù)據(jù)類型 說明
column String 自增列名稱
type String 自增列值生成器類型,可自定義或選擇內(nèi)置類型:SNOWFLAKE/UUID
props Properties 屬性配置, 注意:使用SNOWFLAKE算法,需要配置worker.id與max.tolerate.time.difference.milliseconds屬性

EncryptorRuleConfiguration

名稱 數(shù)據(jù)類型 說明
type String 加解密器類型,可自定義或選擇內(nèi)置類型:MD5/AES
qualifiedColumns String 加解密字段,格式為:表名.列名,例如:tb.col1。多個(gè)列,請(qǐng)用逗號(hào)分隔
assistedQueryColumns String 輔助查詢字段,針對(duì)ShardingQueryAssistedEncryptor類型的加解密器進(jìn)行輔助查詢
props Properties 屬性配置, 注意:使用AES加密器,需要配置AES加密器的KEY屬性:aes.key.value

PropertiesConstant

屬性配置項(xiàng),可以為以下屬性。

名稱 數(shù)據(jù)類型 說明
sql.show (?) boolean 是否開啟SQL顯示,默認(rèn)值: false
executor.size (?) int 工作線程數(shù)量,默認(rèn)值: CPU核數(shù)
max.connections.size.per.query (?) int 每個(gè)物理數(shù)據(jù)庫為每次查詢分配的最大連接數(shù)量。默認(rèn)值: 1
check.table.metadata.enabled (?) boolean 是否在啟動(dòng)時(shí)檢查分表元數(shù)據(jù)一致性,默認(rèn)值: false

讀寫分離

MasterSlaveDataSourceFactory

讀寫分離的數(shù)據(jù)源創(chuàng)建工廠。

名稱 數(shù)據(jù)類型 說明
dataSourceMap Map<String, DataSource> 數(shù)據(jù)源與其名稱的映射
masterSlaveRuleConfig MasterSlaveRuleConfiguration 讀寫分離規(guī)則
props (?) Properties 屬性配置

MasterSlaveRuleConfiguration

讀寫分離規(guī)則配置對(duì)象。

名稱 數(shù)據(jù)類型 說明
name String 讀寫分離數(shù)據(jù)源名稱
masterDataSourceName String 主庫數(shù)據(jù)源名稱
slaveDataSourceNames Collection<String> 從庫數(shù)據(jù)源名稱列表
loadBalanceAlgorithm (?) MasterSlaveLoadBalanceAlgorithm 從庫負(fù)載均衡算法

PropertiesConstant

屬性配置項(xiàng),可以為以下屬性。

名稱 數(shù)據(jù)類型 說明
sql.show (?) boolean 是否打印SQL解析和改寫日志,默認(rèn)值: false
executor.size (?) int 用于SQL執(zhí)行的工作線程數(shù)量,為零則表示無限制。默認(rèn)值: 0
max.connections.size.per.query (?) int 每個(gè)物理數(shù)據(jù)庫為每次查詢分配的最大連接數(shù)量。默認(rèn)值: 1
check.table.metadata.enabled (?) boolean 是否在啟動(dòng)時(shí)檢查分表元數(shù)據(jù)一致性,默認(rèn)值: false

治理

OrchestrationShardingDataSourceFactory

數(shù)據(jù)分片 + 治理的數(shù)據(jù)源工廠。

名稱 數(shù)據(jù)類型 說明
dataSourceMap Map<String, DataSource> 同ShardingDataSourceFactory
shardingRuleConfig ShardingRuleConfiguration 同ShardingDataSourceFactory
props (?) Properties 同ShardingDataSourceFactory
orchestrationConfig OrchestrationConfiguration 治理規(guī)則配置

OrchestrationMasterSlaveDataSourceFactory

讀寫分離 + 治理的數(shù)據(jù)源工廠。

名稱 數(shù)據(jù)類型 說明
dataSourceMap Map<String, DataSource> 同MasterSlaveDataSourceFactory
masterSlaveRuleConfig MasterSlaveRuleConfiguration 同MasterSlaveDataSourceFactory
props (?) Properties 同ShardingDataSourceFactory
orchestrationConfig OrchestrationConfiguration 治理規(guī)則配置

OrchestrationConfiguration

治理規(guī)則配置對(duì)象。

名稱 數(shù)據(jù)類型 說明
name String 治理實(shí)例名稱
overwrite boolean 本地配置是否覆蓋注冊(cè)中心配置,如果可覆蓋,每次啟動(dòng)都以本地配置為準(zhǔn)
regCenterConfig RegistryCenterConfiguration 注冊(cè)中心配置

RegistryCenterConfiguration

用于配置注冊(cè)中心。

名稱 數(shù)據(jù)類型 說明
serverLists String 連接注冊(cè)中心服務(wù)器的列表。包括IP地址和端口號(hào)。多個(gè)地址用逗號(hào)分隔。如: host1:2181,host2:2181
namespace (?) String 注冊(cè)中心的命名空間
digest (?) String 連接注冊(cè)中心的權(quán)限令牌。缺省為不需要權(quán)限驗(yàn)證
operationTimeoutMilliseconds (?) int 操作超時(shí)的毫秒數(shù),默認(rèn)500毫秒
maxRetries (?) int 連接失敗后的最大重試次數(shù),默認(rèn)3次
retryIntervalMilliseconds (?) int 重試間隔毫秒數(shù),默認(rèn)500毫秒
timeToLiveSeconds (?) int 臨時(shí)節(jié)點(diǎn)存活秒數(shù),默認(rèn)60秒
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第三章 數(shù)據(jù)庫系統(tǒng) 3.1 數(shù)據(jù)庫管理系統(tǒng)的類型 通常有多個(gè)分類標(biāo)準(zhǔn)。如按數(shù)據(jù)模型分類、按用戶數(shù)分類、按數(shù)據(jù)庫分布...
    步積閱讀 3,114評(píng)論 0 7
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,332評(píng)論 6 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,626評(píng)論 1 32
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲(chǔ)過程以及高級(jí)映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,224評(píng)論 0 4
  • 嵐,今天沒及時(shí)回你信息很是抱歉的…今天爸媽小爭(zhēng)執(zhí)一會(huì)兒,我去安撫老爸了,沒想到是這么晚了…其實(shí),我很擔(dān)心自己結(jié)婚后...
    夏的山風(fēng)閱讀 175評(píng)論 0 0

友情鏈接更多精彩內(nèi)容