配置示例

数据分片

以下配置中DataSourceUtil的实现为DataSourceUtil,ModuloShardingTableAlgorithm 类需用户自定义实现,具体例子 ModuloShardingTableAlgorithm

     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, new Properties());     }          private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {         KeyGeneratorConfiguration result = new KeyGeneratorConfiguration("SNOWFLAKE", "order_id");         return result;     }          TableRuleConfiguration getOrderTableRuleConfiguration() {         TableRuleConfiguration result = new TableRuleConfiguration("t_order", "ds${0..1}.t_order${0..1}");         result.setKeyGeneratorConfig(getKeyGeneratorConfiguration());         return result;     }          TableRuleConfiguration getOrderItemTableRuleConfiguration() {         TableRuleConfiguration result = new TableRuleConfiguration("t_order_item", "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("ds_master_slave", "ds_master", Arrays.asList("ds_slave0", "ds_slave1"));         return MasterSlaveDataSourceFactory.createDataSource(createDataSourceMap(), masterSlaveRuleConfig, 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;     }

数据脱敏

    DataSource getEncryptDataSource() throws SQLException {        return EncryptDataSourceFactory.createDataSource(DataSourceUtil.createDataSource("demo_ds"), getEncryptRuleConfiguration(), new Properties());    }    private static EncryptRuleConfiguration getEncryptRuleConfiguration() {        Properties props = new Properties();        props.setProperty("aes.key.value", "123456");        EncryptorRuleConfiguration encryptorConfig = new EncryptorRuleConfiguration("AES", props);        EncryptColumnRuleConfiguration columnConfig = new EncryptColumnRuleConfiguration("plain_pwd", "cipher_pwd", "", "aes");        EncryptTableRuleConfiguration tableConfig = new EncryptTableRuleConfiguration(Collections.singletonMap("pwd", columnConfig));        EncryptRuleConfiguration encryptRuleConfig = new EncryptRuleConfiguration();        encryptRuleConfig.getEncryptors().put("aes", encryptorConfig);        encryptRuleConfig.getTables().put("t_encrypt", tableConfig);        return encryptRuleConfig;    }

数据分片 + 读写拆散

    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 PreciseModuloShardingDatabaseAlgorithm()));        shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new PreciseModuloShardingTableAlgorithm()));        shardingRuleConfig.setMasterSlaveRuleConfigs(getMasterSlaveRuleConfigurations());        return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig, new Properties());    }        private static KeyGeneratorConfiguration getKeyGeneratorConfiguration() {        KeyGeneratorConfiguration result = new KeyGeneratorConfiguration("SNOWFLAKE", "order_id");        return result;    }        TableRuleConfiguration getOrderTableRuleConfiguration() {        TableRuleConfiguration result = new TableRuleConfiguration("t_order", "ds_${0..1}.t_order_${[0, 1]}");        result.setKeyGeneratorConfig(getKeyGeneratorConfiguration());        return result;    }        TableRuleConfiguration getOrderItemTableRuleConfiguration() {        TableRuleConfiguration result = new TableRuleConfiguration("t_order_item", "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;    }

数据分片 + 数据脱敏

    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(getEncryptRuleConfiguration());        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 getEncryptRuleConfiguration() {        Properties props = new Properties();        props.setProperty("aes.key.value", "123456");        EncryptorRuleConfiguration encryptorConfig = new EncryptorRuleConfiguration("AES", props);        EncryptColumnRuleConfiguration columnConfig = new EncryptColumnRuleConfiguration("plain_order", "cipher_order", "", "aes");        EncryptTableRuleConfiguration tableConfig = new EncryptTableRuleConfiguration(Collections.singletonMap("order_id", columnConfig));        EncryptRuleConfiguration encryptRuleConfig = new EncryptRuleConfiguration();        encryptRuleConfig.getEncryptors().put("aes", encryptorConfig);        encryptRuleConfig.getTables().put("t_order", tableConfig);        return encryptRuleConfig;    }        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 {        // OrchestrationShardingDataSourceFactory 可替换成 OrchestrationMasterSlaveDataSourceFactory 或 OrchestrationEncryptDataSourceFactory        return OrchestrationShardingDataSourceFactory.createDataSource(                createDataSourceMap(), createShardingRuleConfig(), new HashMap<String, Object>(), new Properties(),                 new OrchestrationConfiguration(createCenterConfigurationMap()));    }    private Map<String, CenterConfiguration> createCenterConfigurationMap() {        Map<String, CenterConfiguration> instanceConfigurationMap = new HashMap<String, CenterConfiguration>();        CenterConfiguration config = createCenterConfiguration();        instanceConfigurationMap.put("orchestration-sharding-data-source", config);        return instanceConfigurationMap;    }    private CenterConfiguration createCenterConfiguration() {        Properties properties = new Properties();        properties.setProperty("overwrite", overwrite);        CenterConfiguration result = new CenterConfiguration("zookeeper", properties);        result.setServerLists("localhost:2181");        result.setNamespace("sharding-sphere-orchestration");        result.setOrchestrationType("registry_center,config_center");        return result;    }

配置项阐明

数据分片

ShardingDataSourceFactory

数据分片的数据源创立工厂。

名称数据类型阐明
dataSourceMapMap<String, DataSource>数据源配置
shardingRuleConfigShardingRuleConfiguration数据分片配置规定
props (?)Properties属性配置

ShardingRuleConfiguration

分片规定配置对象。

名称数据类型阐明
tableRuleConfigsCollection<TableRuleConfiguration>分片规定列表
bindingTableGroups (?)Collection<String>绑定表规定列表
broadcastTables (?)Collection<String>播送表规定列表
defaultDataSourceName (?)String未配置分片规定的表将通过默认数据源定位
defaultDatabaseShardingStrategyConfig (?)ShardingStrategyConfiguration默认分库策略
defaultTableShardingStrategyConfig (?)ShardingStrategyConfiguration默认分表策略
defaultKeyGeneratorConfig (?)KeyGeneratorConfiguration默认自增列值生成器配置,缺省将应用org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator
masterSlaveRuleConfigs (?)Collection<MasterSlaveRuleConfiguration>读写拆散规定,缺省示意不应用读写拆散

TableRuleConfiguration

表分片规定配置对象。

名称数据类型阐明
logicTableString逻辑表名称
actualDataNodes (?)String由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,反对inline表达式。缺省示意应用已知数据源与逻辑表名称生成数据节点,用于播送表(即每个库中都须要一个同样的表用于关联查问,多为字典表)或只分库不分表且所有库的表构造完全一致的状况
databaseShardingStrategyConfig (?)ShardingStrategyConfiguration分库策略,缺省示意应用默认分库策略
tableShardingStrategyConfig (?)ShardingStrategyConfiguration分表策略,缺省示意应用默认分表策略
keyGeneratorConfig (?)KeyGeneratorConfiguration自增列值生成器配置,缺省示意应用默认自增主键生成器
encryptorConfiguration (?)EncryptorConfiguration加解密生成器配置

StandardShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于单分片键的规范分片场景。

名称数据类型阐明
shardingColumnString分片列名称
preciseShardingAlgorithmPreciseShardingAlgorithm准确分片算法,用于=和IN
rangeShardingAlgorithm (?)RangeShardingAlgorithm范畴分片算法,用于BETWEEN

ComplexShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于多分片键的复合分片场景。

名称数据类型阐明
shardingColumnsString分片列名称,多个列以逗号分隔
shardingAlgorithmComplexKeysShardingAlgorithm复合分片算法

InlineShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于配置行表达式分片策略。

名称数据类型阐明
shardingColumnString分片列名称
algorithmExpressionString分片算法行表达式,需合乎groovy语法,详情请参考行表达式

HintShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于配置Hint形式分片策略。

名称数据类型阐明
shardingAlgorithmHintShardingAlgorithmHint分片算法

NoneShardingStrategyConfiguration

ShardingStrategyConfiguration的实现类,用于配置不分片的策略。

KeyGeneratorConfiguration

名称数据类型阐明
columnString自增列名称
typeString自增列值生成器类型,可自定义或抉择内置类型:SNOWFLAKE/UUID
propsProperties自增列值生成器的相干属性配置

Properties

属性配置项,能够为以下自增列值生成器的属性。

SNOWFLAKE
名称数据类型阐明
worker.id (?)long工作机器惟一id,默认为0
max.tolerate.time.difference.milliseconds (?)long最大容忍时钟回退工夫,单位:毫秒。默认为10毫秒
max.vibration.offset (?)int最大抖动上限值,范畴[0, 4096),默认为1。注:若应用此算法生成值作分片值,倡议配置此属性。此算法在不同毫秒内所生成的key取模2^n (2^n个别为分库或分表数) 之后后果总为0或1。为避免上述分片问题,倡议将此属性值配置为(2^n)-1

EncryptRuleConfiguration

名称数据类型阐明
encryptorsMap<String, EncryptorRuleConfiguration>加解密器配置列表,可自定义或抉择内置类型:MD5/AES
tablesMap<String, EncryptTableRuleConfiguration>加密表配置列表

EncryptorRuleConfiguration

名称数据类型阐明
typeString加解密器类型,可自定义或抉择内置类型:MD5/AES
propertiesProperties属性配置, 留神:应用AES加密器,须要配置AES加密器的KEY属性:aes.key.value

EncryptTableRuleConfiguration

名称数据类型阐明
tablesMap<String, EncryptColumnRuleConfiguration>加密列配置列表

EncryptColumnRuleConfiguration

名称数据类型阐明
plainColumnString存储明文的字段
cipherColumnString存储密文的字段
assistedQueryColumnString辅助查问字段,针对ShardingQueryAssistedEncryptor类型的加解密器进行辅助查问
encryptorString加解密器名字

Properties

属性配置项,能够为以下属性。

名称数据类型阐明
sql.show (?)boolean是否开启SQL显示,默认值: false
executor.size (?)int工作线程数量,默认值: CPU核数
max.connections.size.per.query (?)int每个物理数据库为每次查问调配的最大连贯数量。默认值: 1
check.table.metadata.enabled (?)boolean是否在启动时查看分表元数据一致性,默认值: false
query.with.cipher.column (?)boolean当存在明文列时,是否应用密文列查问,默认值: true
allow.range.query.with.inline.sharding (?)boolean当应用inline分表策略时,是否容许范畴查问,默认值: false

读写拆散

MasterSlaveDataSourceFactory

读写拆散的数据源创立工厂。

名称数据类型阐明
dataSourceMapMap<String, DataSource>数据源与其名称的映射
masterSlaveRuleConfigMasterSlaveRuleConfiguration读写拆散规定
props (?)Properties属性配置

MasterSlaveRuleConfiguration

读写拆散规定配置对象。

名称数据类型阐明
nameString读写拆散数据源名称
masterDataSourceNameString主库数据源名称
slaveDataSourceNamesCollection<String>从库数据源名称列表
loadBalanceAlgorithm (?)MasterSlaveLoadBalanceAlgorithm从库负载平衡算法

Properties

属性配置项,能够为以下属性。

名称数据类型阐明
sql.show (?)boolean是否打印SQL解析和改写日志,默认值: false
executor.size (?)int用于SQL执行的工作线程数量,为零则示意无限度。默认值: 0
max.connections.size.per.query (?)int每个物理数据库为每次查问调配的最大连贯数量。默认值: 1
check.table.metadata.enabled (?)boolean是否在启动时查看分表元数据一致性,默认值: false

数据脱敏

EncryptDataSourceFactory

名称数据类型阐明
dataSourceDataSource数据源,任意连接池
encryptRuleConfigEncryptRuleConfiguration数据脱敏规定
props (?)Properties属性配置

EncryptRuleConfiguration

名称数据类型阐明
encryptorsMap<String, EncryptorRuleConfiguration>加解密器配置列表,可自定义或抉择内置类型:MD5/AES
tablesMap<String, EncryptTableRuleConfiguration>加密表配置列表

Properties

属性配置项,能够为以下属性。

名称数据类型阐明
sql.show (?)boolean是否开启SQL显示,默认值: false
query.with.cipher.column (?)boolean当存在明文列时,是否应用密文列查问,默认值: true

治理

OrchestrationShardingDataSourceFactory

数据分片 + 治理的数据源工厂。

名称数据类型阐明
dataSourceMapMap<String, DataSource>同ShardingDataSourceFactory
shardingRuleConfigShardingRuleConfiguration同ShardingDataSourceFactory
props (?)Properties同ShardingDataSourceFactory
orchestrationConfigOrchestrationConfiguration治理规定配置

OrchestrationMasterSlaveDataSourceFactory

读写拆散 + 治理的数据源工厂。

名称数据类型阐明
dataSourceMapMap<String, DataSource>同MasterSlaveDataSourceFactory
masterSlaveRuleConfigMasterSlaveRuleConfiguration同MasterSlaveDataSourceFactory
props (?)Properties同ShardingDataSourceFactory
orchestrationConfigOrchestrationConfiguration治理规定配置

OrchestrationEncryptDataSourceFactory

数据脱敏 + 治理的数据源工厂。

名称数据类型阐明
dataSourceDataSource同EncryptDataSourceFactory
encryptRuleConfigEncryptRuleConfiguration同EncryptDataSourceFactory
props (?)Properties同ShardingDataSourceFactory
orchestrationConfigOrchestrationConfiguration治理规定配置

OrchestrationConfiguration

治理规定配置对象。

名称数据类型阐明
instanceConfigurationMapMap<String, CenterConfiguration>配置核心和注册核心的配置map,key为名称,value为配置或注册核心

CenterConfiguration

用于配置配置核心或注册核心。

名称数据类型阐明
typeString配置核心或注册核心的实例类型,例如zookeeper或etcd、apollo、nacos
propertiesString配置本实例须要的其余参数,例如zookeeper的连贯参数等,具体参考properties配置
orchestrationTypeString配置核心或注册核心的类型,例如config-center或registry-center,如果都是,能够"setOrchestrationType("registry_center,config_center");"
serverListsString连贯配置核心或注册核心服务器的列表,包含IP地址和端口号,多个地址用逗号分隔。如: host1:2181,host2:2181
namespace (?)String配置核心或注册核心的命名空间

其中properties的通用配置如下:

名称数据类型阐明
overwriteboolean本地配置是否笼罩注册核心配置,如果可笼罩,每次启动都以本地配置为准

如果采纳了zookeeper作为配置核心或(和)注册核心,那么properties还能够配置:

名称数据类型阐明
digest (?)String连贯注册核心的权限令牌。缺省为不须要权限验证
operationTimeoutMilliseconds (?)int操作超时的毫秒数,默认500毫秒
maxRetries (?)int连贯失败后的最大重试次数,默认3次
retryIntervalMilliseconds (?)int重试距离毫秒数,默认500毫秒
timeToLiveSeconds (?)int长期节点存活秒数,默认60秒

如果采纳了etcd作为配置核心或(和)注册核心,那么properties还能够配置:

名称数据类型阐明
timeToLiveSeconds (?)longTTL工夫,单位为秒,默认30秒

如果采纳了apollo作为配置核心,那么properties还能够配置:

名称数据类型阐明
appId (?)Stringapollo appId,默认值为"APOLLO_SHARDINGSPHERE"
env (?)Stringapollo env,默认值为"DEV"
clusterName (?)Stringapollo clusterName,默认值为"default"
administrator (?)Stringapollo administrator,默认值为""
token (?)Stringapollo token,默认值为""
portalUrl (?)Stringapollo portalUrl,默认值为""
connectTimeout (?)intapollo connectTimeout,默认值为1000毫秒
readTimeout (?)intapollo readTimeout,默认值为5000毫秒

如果采纳了nacos作为配置核心,那么properties还能够配置:

名称数据类型阐明
group (?)Stringnacos group配置,默认值为"SHARDING_SPHERE_DEFAULT_GROUP"
timeout (?)longnacos 获取数据超时工夫,单位为毫秒,默认值为3000毫秒