diff --git a/document/cn/content/06-sharding-jdbc/configuration/config-java.md b/document/cn/content/06-sharding-jdbc/configuration/config-java.md index 36ac8d5621533da041f693b041abaa6daead5e30..897f120ad02c0885a6122048f6ad9c33dce7c770 100644 --- a/document/cn/content/06-sharding-jdbc/configuration/config-java.md +++ b/document/cn/content/06-sharding-jdbc/configuration/config-java.md @@ -4,22 +4,10 @@ title = "Java配置" weight = 1 +++ -## JAVA配置 +## 配置示例 -### 引入maven依赖 +### 数据分片 -```xml - - - io.shardingjdbc - sharding-jdbc-core - ${latest.release.version} - -``` - -### 配置示例 - -#### 分库分表 ```java DataSource getShardingDataSource() throws SQLException { ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); @@ -27,23 +15,23 @@ weight = 1 shardingRuleConfig.getTableRuleConfigs().add(getOrderItemTableRuleConfiguration()); 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", ModuloShardingTableAlgorithm.class.getName())); + shardingRuleConfig.setDefaultTableShardingStrategyConfig(new StandardShardingStrategyConfiguration("order_id", new ModuloShardingTableAlgorithm())); return ShardingDataSourceFactory.createDataSource(createDataSourceMap(), shardingRuleConfig); } TableRuleConfiguration getOrderTableRuleConfiguration() { - TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration(); - orderTableRuleConfig.setLogicTable("t_order"); - orderTableRuleConfig.setActualDataNodes("demo_ds_${0..1}.t_order_${0..1}"); - orderTableRuleConfig.setKeyGeneratorColumnName("order_id"); - return orderTableRuleConfig; + TableRuleConfiguration result = new TableRuleConfiguration(); + result.setLogicTable("t_order"); + result.setActualDataNodes("demo_ds_${0..1}.t_order_${0..1}"); + result.setKeyGeneratorColumnName("order_id"); + return result; } TableRuleConfiguration getOrderItemTableRuleConfiguration() { - TableRuleConfiguration orderItemTableRuleConfig = new TableRuleConfiguration(); - orderItemTableRuleConfig.setLogicTable("t_order_item"); - orderItemTableRuleConfig.setActualDataNodes("demo_ds_${0..1}.t_order_item_${0..1}"); - return orderItemTableRuleConfig; + TableRuleConfiguration result = new TableRuleConfiguration(); + result.setLogicTable("t_order_item"); + result.setActualDataNodes("demo_ds_${0..1}.t_order_item_${0..1}"); + return result; } Map createDataSourceMap() { @@ -54,7 +42,8 @@ weight = 1 } ``` -#### 读写分离 +### 读写分离 + ```java DataSource getMasterSlaveDataSource() throws SQLException { MasterSlaveRuleConfiguration masterSlaveRuleConfig = new MasterSlaveRuleConfiguration(); @@ -65,7 +54,7 @@ weight = 1 } Map createDataSourceMap() { - final Map result = new HashMap<>(); + Map result = new HashMap<>(); result.put("demo_ds_master", DataSourceUtil.createDataSource("demo_ds_master")); result.put("demo_ds_slave_0", DataSourceUtil.createDataSource("demo_ds_slave_0")); result.put("demo_ds_slave_1", DataSourceUtil.createDataSource("demo_ds_slave_1")); @@ -73,7 +62,7 @@ weight = 1 } ``` -#### 分库分表 + 读写分离 +### 数据分片 + 读写分离 ```java DataSource getShardingDataSource() throws SQLException { @@ -88,18 +77,18 @@ weight = 1 } TableRuleConfiguration getOrderTableRuleConfiguration() { - TableRuleConfiguration orderTableRuleConfig = new TableRuleConfiguration(); - orderTableRuleConfig.setLogicTable("t_order"); - orderTableRuleConfig.setActualDataNodes("ds_${0..1}.t_order_${[0, 1]}"); - orderTableRuleConfig.setKeyGeneratorColumnName("order_id"); - return orderTableRuleConfig; + TableRuleConfiguration result = new TableRuleConfiguration(); + result.setLogicTable("t_order"); + result.setActualDataNodes("ds_${0..1}.t_order_${[0, 1]}"); + result.setKeyGeneratorColumnName("order_id"); + return result; } TableRuleConfiguration getOrderItemTableRuleConfiguration() { - TableRuleConfiguration orderItemTableRuleConfig = new TableRuleConfiguration(); - orderItemTableRuleConfig.setLogicTable("t_order_item"); - orderItemTableRuleConfig.setActualDataNodes("ds_${0..1}.t_order_item_${[0, 1]}"); - return orderItemTableRuleConfig; + TableRuleConfiguration result = new TableRuleConfiguration(); + result.setLogicTable("t_order_item"); + result.setActualDataNodes("ds_${0..1}.t_order_item_${[0, 1]}"); + return result; } List getMasterSlaveRuleConfigurations() { @@ -107,7 +96,7 @@ weight = 1 masterSlaveRuleConfig1.setName("ds_0"); masterSlaveRuleConfig1.setMasterDataSourceName("demo_ds_master_0"); masterSlaveRuleConfig1.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_0_slave_0", "demo_ds_master_0_slave_1")); - + MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration(); masterSlaveRuleConfig2.setName("ds_1"); masterSlaveRuleConfig2.setMasterDataSourceName("demo_ds_master_1"); @@ -116,168 +105,240 @@ weight = 1 } Map createDataSourceMap() { - final Map result = new HashMap<>(); + Map 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")); - + MasterSlaveRuleConfiguration masterSlaveRuleConfig1 = new MasterSlaveRuleConfiguration(); masterSlaveRuleConfig1.setName("ds_0"); masterSlaveRuleConfig1.setMasterDataSourceName("demo_ds_master_0"); masterSlaveRuleConfig1.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_0_slave_0", "demo_ds_master_0_slave_1")); - + MasterSlaveRuleConfiguration masterSlaveRuleConfig2 = new MasterSlaveRuleConfiguration(); masterSlaveRuleConfig2.setName("ds_1"); masterSlaveRuleConfig2.setMasterDataSourceName("demo_ds_master_1"); masterSlaveRuleConfig2.setSlaveDataSourceNames(Arrays.asList("demo_ds_master_1_slave_0", "demo_ds_master_1_slave_1")); + + return result; + } +``` + +### 使用Zookeeper的数据治理配置示例 + +```java + DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource( + createDataSourceMap(), createShardingRuleConfig(), new HashMap(), new Properties(), + new OrchestrationConfiguration("orchestration-sharding-data-source", getRegistryCenterConfiguration(), false)); + private RegistryCenterConfiguration getRegistryCenterConfiguration() { + ZookeeperConfiguration result = new ZookeeperConfiguration(); + result.setServerLists("localhost:2181"); + result.setNamespace("orchestration-demo"); return result; } ``` -##### 配置项说明 +### 使用Etcd的数据治理配置示例 -##### 分库分表 +```java + DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource( + createDataSourceMap(), createShardingRuleConfig(), new HashMap(), new Properties(), + new OrchestrationConfiguration("orchestration-sharding-data-source", getRegistryCenterConfiguration(), false)); + + private RegistryCenterConfiguration getRegistryCenterConfiguration() { + EtcdConfiguration result = new EtcdConfiguration(); + result.setServerLists("http://localhost:2379"); + return result; + } +``` -##### ShardingDataSourceFactory +## 配置项说明 -| *名称* | *数据类型* | *必填* | *说明* | -| ----------------------------- | --------- | ------ | -------------- | -| dataSourceMap | Map\ | 是 | 数据源与其名称的映射 | -| shardingRuleConfig | ShardingRuleConfiguration | 是 | 分库分表配置规则 | -| configMap? | Map\ | 否 | 配置映射关系| -| props? | Properties | 否 | 相关属性配置 | +### 数据分片 -##### ShardingRuleConfiguration +#### ShardingDataSourceFactory -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------- | ---------- | ------ | --------------------------------------------------------------------- | -| defaultDataSourceName? | String | 否 | 默认数据源名称,未配置分片规则的表将通过默认数据源定位 | -| defaultDatabaseShardingStrategyConfig? | ShardingStrategyConfiguration | 否 | 默认分库策略 | -| defaultTableShardingStrategyConfig? | ShardingStrategyConfiguration | 否 | 默认分表策略 | -| defaultKeyGenerator? | KeyGenerator |否|自增列值生成类名 -| tableRuleConfigs | Collection\ | 是 | 分片规则列表 | -| bindingTableGroups? | Collection\ | 否| 绑定表规则| -| masterSlaveRuleConfigs? | Collection\|否|读写分离配置| +数据分片的数据源创建工厂。 +| *名称* | *数据类型* | *说明* | +| ------------------ | ------------------------ | ------------------ | +| dataSourceMap | Map\ | 数据源与其名称的映射 | +| shardingRuleConfig | ShardingRuleConfiguration | 分库分表配置规则 | +| configMap (?) | Map\ | 配置映射关系 | +| props (?) | Properties | 相关属性配置 | -##### TableRuleConfiguration +#### ShardingRuleConfiguration -| *名称* | *数据类型* | *必填* | *说明* | -| -------------------- | ---------- | ------ | ------- | -| logicTable | String | 是 | 逻辑表名 | -| actualDataNodes? | String | 否 | 真实数据节点| -| databaseShardingStrategyConfig? | ShardingStrategyConfiguration | 否 | 分库策略 | -| tableShardingStrategyConfig? | ShardingStrategyConfiguration | 否 | 分表策略 | -| logicIndex? | String | 否 | 逻辑索引名称,对于分表的Oracle/PostgreSQL数据库中DROP INDEX XXX语句,需要通过配置逻辑索引名称定位所执行SQL的真实分表 | -| keyGeneratorColumnName? | String | 否 | 自增列名| -| keyGenerator? | KeyGenerator | 否| 自增列值生成类| +分片规则配置对象。 +| *名称* | *数据类型* | *说明* | +| ----------------------------------------- | ------------------------------------------ | ----------------------------------------------- | +| defaultDataSourceName (?) | String | 默认数据源名称,未配置分片规则的表将通过默认数据源定位 | +| defaultDatabaseShardingStrategyConfig (?) | ShardingStrategyConfiguration | 默认分库策略 | +| defaultTableShardingStrategyConfig (?) | ShardingStrategyConfiguration | 默认分表策略 | +| defaultKeyGenerator (?) | KeyGenerator | 默认自增列值生成器 | +| tableRuleConfigs | Collection\ | 分片规则列表 | +| bindingTableGroups (?) | Collection\ | 绑定表规则列表 | +| masterSlaveRuleConfigs (?) | Collection\ | 读写分离规则,不填写表示不使用读写分离 | -##### StandardShardingStrategyConfiguration +#### TableRuleConfiguration -标准分片策略,用于单分片键的场景 +表分片规则配置对象。 -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------ | ---------- | ------ | --------------------------------------------------------------------- | -| shardingColumn | String | 是 | 分片列名 | -| preciseShardingAlgorithm | PreciseShardingAlgorithm | 是 | 精确的分片算法类名称,用于=和IN。该类需使用默认的构造器或者提供无参数的构造器 | -| rangeShardingAlgorithm? | RangeShardingAlgorithm | 否 | 范围的分片算法类名称,用于BETWEEN。该类需使用默认的构造器或者提供无参数的构造器 | +| *名称* | *数据类型* | *说明* | +| ---------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------- | +| logicTable | String | 逻辑表名称 | +| actualDataNodes (?) | String | 真实数据节点名称,不填写表示不分表 | +| databaseShardingStrategyConfig (?) | ShardingStrategyConfiguration | 分库策略,不填写表示使用默认分库策略 | +| tableShardingStrategyConfig (?) | ShardingStrategyConfiguration | 分表策略,不填写表示使用默认分表策略 | +| logicIndex (?) | String | 逻辑索引名称,对于分表的Oracle/PostgreSQL数据库中DROP INDEX XXX语句,需要通过配置逻辑索引名称定位所执行SQL的真实分表 | +| keyGeneratorColumnName (?) | String | 自增列名称,不填写表示不使用自增主键生成器 | +| keyGenerator (?) | KeyGenerator | 自增列值生成器,如果填写了keyGeneratorColumnName,不填写keyGenerator,表示使用默认自增主键生成器 | +#### StandardShardingStrategyConfiguration -##### ComplexShardingStrategyConfiguration +ShardingStrategyConfiguration的实现类,用于配置标准分片策略。 -复合分片策略,用于多分片键的场景 +| *名称* | *数据类型* | *说明* | +| -------------------------- | ------------------------ | --------------------------------------------------------------------- | +| shardingColumn | String | 分片列名 | +| preciseShardingAlgorithm | PreciseShardingAlgorithm | 精确的分片算法类名称,用于=和IN。该类需使用默认的构造器或者提供无参数的构造器 | +| rangeShardingAlgorithm (?) | RangeShardingAlgorithm | 范围的分片算法类名称,用于BETWEEN。该类需使用默认的构造器或者提供无参数的构造器 | -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------ | ---------- | ------ | --------------------------------------------------- | -| shardingColumns | String | 是 | 分片列名,多个列以逗号分隔 | -| shardingAlgorithm | ComplexKeysShardingAlgorithm | 是 | 分片算法全类名,该类需使用默认的构造器或者提供无参数的构造器 | +#### ComplexShardingStrategyConfiguration -##### InlineShardingStrategyConfiguration +ShardingStrategyConfiguration的实现类,用于配置复合分片策略。 -inline表达式分片策略 +| *名称* | *数据类型* | *说明* | +| ----------------- | ---------------------------- | ----------------------------------------------------- | +| shardingColumns | String | 分片列名,多个列以逗号分隔 | +| shardingAlgorithm | ComplexKeysShardingAlgorithm | 分片算法全类名,该类需使用默认的构造器或者提供无参数的构造器 | -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------- | ---------- | ------ | ------------ | -| shardingColumn | String | 是 | 分片列名 | -| algorithmExpression | String | 是 | 分片算法表达式 | +#### InlineShardingStrategyConfiguration -##### HintShardingStrategyConfiguration +ShardingStrategyConfiguration的实现类,用于配置行表达式分片策略。 -Hint方式分片策略 +| *名称* | *数据类型* | *说明* | +| ------------------- | ----------- | ------------ | +| shardingColumn | String | 分片列名 | +| algorithmExpression | String | 分片算法表达式 | -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------- | ---------- | ------ | --------------------------------------------------- | -| shardingAlgorithm | HintShardingAlgorithm | 是 | 分片算法全类名,该类需使用默认的构造器或者提供无参数的构造器 | +#### HintShardingStrategyConfiguration -##### NoneShardingStrategyConfiguration +ShardingStrategyConfiguration的实现类,用于配置Hint方式分片策略。 -不分片的策略 +| *名称* | *数据类型* | *说明* | +| ----------------- | --------------------- | ---------------------------------------------------- | +| shardingAlgorithm | HintShardingAlgorithm | 分片算法全类名,该类需使用默认的构造器或者提供无参数的构造器 | -##### ShardingPropertiesConstant +#### NoneShardingStrategyConfiguration -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------------- | ---------- | ----- | ----------------------------------- | -| sql.show | boolean | 是 | 是否开启SQL显示,默认为false不开启 | -| executor.size? | int | 否 | 最大工作线程数量 | +ShardingStrategyConfiguration的实现类,用于配置不分片的策略。 -##### configMap +#### ShardingPropertiesConstant -##### 读写分离 +属性配置项,可以为以下属性。 -##### MasterSlaveDataSourceFactory +| *名称* | *数据类型* | *说明* | +| ----------------- | --------- | ------------------------------- | +| sql.show (?) | boolean | 是否开启SQL显示,默认为false不开启 | +| executor.size (?) | int | 最大工作线程数量 | -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------ | --------- | ------ | ---------------------------------------- | -| dataSourceMap | Map\ | 是 | 数据源与其名称的映射 | -| shardingRuleConfig | ShardingRuleConfiguration | 是 | 分库分表规则配置 | -| configMap? | Map\ | 否 | 配置映射关系| +#### configMap +为用户提供的自定义透传的配置项。 -##### MasterSlaveRuleConfiguration +### 读写分离 -| *名称* | *数据类型* | *必填* | *说明* | -| ------------------------------ | --------- | ------ | ---------------------------------------- | -| name | String | 是 | 读写分离配置名称 | -| masterDataSourceName | String | 是 | 主库数据源 | -| slaveDataSourceNames | Collection\ | 是 | 从库数据源列表 | -| loadBalanceAlgorithm? | MasterSlaveLoadBalanceAlgorithm | 否 | 主从库访问策略 | +#### MasterSlaveDataSourceFactory -##### configMap +读写分离的数据源创建工厂。 +| *名称* | *数据类型* | *说明* | +| --------------------- | ---------------------------- | ------------------ | +| dataSourceMap | Map\ | 数据源与其名称的映射 | +| masterSlaveRuleConfig | MasterSlaveRuleConfiguration | 读写分离规则 | +| configMap (?) | Map\ | 配置映射关系 | -#### 编排治理配置 +#### MasterSlaveRuleConfiguration -##### Zookeeper配置示例 +读写分离规则配置对象。 -```java - DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource( - createDataSourceMap(), createShardingRuleConfig(), new ConcurrentHashMap(), new Properties(), - new OrchestrationConfiguration("orchestration-sharding-data-source", getRegistryCenterConfiguration(), false)); - - private static RegistryCenterConfiguration getRegistryCenterConfiguration() { - ZookeeperConfiguration result = new ZookeeperConfiguration(); - result.setServerLists("localhost:2181"); - result.setNamespace("orchestration-demo"); - return result; - } -``` +| *名称* | *数据类型* | *说明* | +| ------------------------ | ------------------------------- | -------------- | +| name | String | 读写分离配置名称 | +| masterDataSourceName | String | 主库数据源 | +| slaveDataSourceNames | Collection\ | 从库数据源列表 | +| loadBalanceAlgorithm (?) | MasterSlaveLoadBalanceAlgorithm | 主从库访问策略 | -##### Etcd配置示例 +#### configMap -```java - DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource( - createDataSourceMap(), createShardingRuleConfig(), new ConcurrentHashMap(), new Properties(), - new OrchestrationConfiguration("orchestration-sharding-data-source", getRegistryCenterConfiguration(), false)); - - private static RegistryCenterConfiguration getRegistryCenterConfiguration() { - EtcdConfiguration result = new EtcdConfiguration(); - result.setServerLists("http://localhost:2379"); - return result; - } -``` +为用户提供的自定义透传的配置项。 + +### 数据治理 + +#### OrchestrationShardingDataSourceFactory + +数据分片 + 数据治理的数据源创建工厂。 + +| *名称* | *数据类型* | *说明* | +| ------------------- | ------------------------- | --------------------------- | +| dataSourceMap | Map\ | 同ShardingDataSourceFactory | +| shardingRuleConfig | ShardingRuleConfiguration | 同ShardingDataSourceFactory | +| configMap (?) | Map\ | 同ShardingDataSourceFactory | +| props (?) | Properties | 同ShardingDataSourceFactory | +| orchestrationConfig | OrchestrationConfiguration | 数据治理规则配置 | + +#### OrchestrationMasterSlaveDataSourceFactory + +读写分离 + 数据治理的数据源创建工厂。 + +| *名称* | *数据类型* | *说明* | +| --------------------- | ---------------------------- | ------------------ | +| dataSourceMap | Map\ | 数据源与其名称的映射 | +| masterSlaveRuleConfig | MasterSlaveRuleConfiguration | 读写分离规则 | +| configMap (?) | Map\ | 配置映射关系 | +| orchestrationConfig | OrchestrationConfiguration | 数据治理规则配置 | + +#### OrchestrationConfiguration + +数据治理规则配置对象。 + +| *名称* | *数据类型* | *说明* | +| --------------- | --------------------------- | -------------------------------------- | +| name | String | 数据治理实例名称 | +| regCenterConfig | RegistryCenterConfiguration | 注册中心配置 | +| overwrite | boolean | 本地配置是否覆盖注册中心配置 | +| type | String | 数据源类型,可选值:sharding,masterslave | + +#### ZookeeperConfiguration + +RegistryCenterConfiguration的实现类,用于配置Zookeeper注册中心。 + +| *名称* | *数据类型* | *说明* | +| ----------------------------- | ---------- | ------------------------------------------------------------------------- | +| serverLists | String | Zookeeper连接地址,多个Zookeeper用逗号分隔,如:localhost:2181,localhost:3181 | +| namespace | String | Zookeeper的命名空间 | +| baseSleepTimeMilliseconds (?) | int | 连接失败的初始等待毫秒数,默认1000毫秒 | +| maxSleepTimeMilliseconds (?) | int | 连接失败的最大等待毫秒数,默认3000毫秒 | +| maxRetries (?) | int | 连接失败后的最大重试次数,默认3次 | +| sessionTimeoutMilliseconds | int | 会话超时毫秒数 | +| connectionTimeoutMilliseconds | int | 连接超时毫秒数 | +| digest (?) | String | 连接凭证 | + +#### EtcdConfiguration + +RegistryCenterConfiguration的实现类,用于配置Etcd注册中心。 +| *名称* | *数据类型* | *说明* | +| ----------------------------- | ---------- | --------------------------------------------------------------- | +| serverLists | String | Etcd连接地址,多个Etcd用逗号分隔,如:localhost:2379,localhost:3379 | +| timeToLiveSeconds (?) | int | 数据存活秒数,默认60秒 | +| timeoutMilliseconds (?) | int | 请求超时毫秒数,默认500毫秒 | +| retryIntervalMilliseconds (?) | int | 重试间隔毫秒数,默认200毫秒 | +| maxRetries (?) | int | 请求失败后的最大重试次数,默认3次 |