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秒 |