|
|
@@ -10,6 +10,7 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.shardingsphere.driver.api.ShardingSphereDataSourceFactory;
|
|
|
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
|
|
|
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
|
|
|
+import org.apache.shardingsphere.infra.metadata.database.schema.util.SchemaMetaDataUtil;
|
|
|
import org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlModeConfiguration;
|
|
|
import org.apache.shardingsphere.infra.yaml.config.pojo.mode.YamlPersistRepositoryConfiguration;
|
|
|
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
|
|
|
@@ -18,6 +19,8 @@ import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
|
|
|
import org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
|
|
|
import org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
|
|
|
import org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
|
|
|
+import org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
|
|
|
+import org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
|
|
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
|
|
import org.springframework.context.annotation.Bean;
|
|
|
@@ -84,7 +87,7 @@ public class ShardingJdbcAutoConfig {
|
|
|
Map<String, DataSource> dataSourceMap = createDataSources(shardingJdbcProperties);
|
|
|
/*构建属性配置*/
|
|
|
Properties props = shardingJdbcProperties.getProps();
|
|
|
- return ShardingSphereDataSourceFactory.createDataSource(/*shardingJdbcProperties.getDatabaseName(),*/ modeConfiguration, dataSourceMap, Collections.singleton(createShardingRuleConfiguration(shardingJdbcProperties)), props);
|
|
|
+ return ShardingSphereDataSourceFactory.createDataSource(shardingJdbcProperties.getDatabaseName(), modeConfiguration, dataSourceMap, Collections.singleton(createShardingRuleConfiguration(shardingJdbcProperties)), props);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -92,45 +95,115 @@ public class ShardingJdbcAutoConfig {
|
|
|
*
|
|
|
* @param shardingJdbcProperties
|
|
|
* @return
|
|
|
+ * @see SchemaMetaDataUtil.checkDataSourceTypeIncludeInstanceAndSetDatabaseTableMap
|
|
|
*/
|
|
|
private ShardingRuleConfiguration createShardingRuleConfiguration(ShardingJdbcProperties shardingJdbcProperties) {
|
|
|
ShardingRuleConfiguration result = new ShardingRuleConfiguration();
|
|
|
+ /*tables*/
|
|
|
+ result.getTables().add(getJoinOne());
|
|
|
+ result.getTables().add(getJoinTwo());
|
|
|
+ /*bindingTables 用于跨库*/
|
|
|
+// result.getBindingTableGroups().add(new ShardingTableReferenceRuleConfiguration("join1", "t_student,kws_user"));
|
|
|
+ /*broadcastTables*/
|
|
|
+// result.getBroadcastTables().add("t_student");
|
|
|
+// result.getBroadcastTables().add("t_teacher");
|
|
|
|
|
|
-// RuleConfiguration rules = shardingJdbcProperties.getRules();
|
|
|
-// /*tables*/
|
|
|
-// Map<String, ShardingTableRuleConfiguration> tables = rules.getTables();
|
|
|
-// if (!CollectionUtils.isEmpty(tables)) {
|
|
|
-// for (Map.Entry<String, ShardingTableRuleConfiguration> one : tables.entrySet()) {
|
|
|
-// ShardingTableRuleConfiguration value = one.getValue();
|
|
|
-// ShardingTableRuleConfiguration shardingTableRuleConfiguration = new ShardingTableRuleConfiguration(one.getKey(), value.getActualDataNodes());
|
|
|
-// shardingTableRuleConfiguration.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("order_id", "snowflake"));
|
|
|
-// shardingTableRuleConfiguration.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
|
|
|
-// result.getTables().add(shardingTableRuleConfiguration);
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- result.getTables().add(getOrderTableRuleConfiguration());
|
|
|
-// result.getTables().add(getOrderItemTableRuleConfiguration());
|
|
|
-// result.getBindingTableGroups().add(new ShardingTableReferenceRuleConfiguration("a",new ShardingTableRuleConfiguration("",new Object())));
|
|
|
-// result.getBroadcastTables().add("t_address");
|
|
|
-// result.setDefaultDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("id", "t_student_inline"));
|
|
|
+ /*shardingAlgorithms*/
|
|
|
+// Properties propsdb0 = new Properties();
|
|
|
+// propsdb0.setProperty("algorithm-expression", "test_0");
|
|
|
+// propsdb0.setProperty("allow-range-query-with-inline-sharding", "true");
|
|
|
+// result.getShardingAlgorithms().put("default_db0_inline", new AlgorithmConfiguration("INLINE", propsdb0));
|
|
|
+// Properties propsdb1 = new Properties();
|
|
|
+// propsdb1.setProperty("algorithm-expression", "test_1");
|
|
|
+// propsdb1.setProperty("allow-range-query-with-inline-sharding", "true");
|
|
|
+// result.getShardingAlgorithms().put("default_db1_inline", new AlgorithmConfiguration("INLINE", propsdb1));
|
|
|
+//
|
|
|
+// /*通过id进行分库*/
|
|
|
// Properties props = new Properties();
|
|
|
-// props.setProperty("algorithm-expression", "t_student_{id % 2}");
|
|
|
-// result.getShardingAlgorithms().put("t_student_inline", new AlgorithmConfiguration("INLINE", props));
|
|
|
+// props.setProperty("algorithm-expression", "test_0");
|
|
|
+// result.getShardingAlgorithms().put("default_database_id_inline", new AlgorithmConfiguration("INLINE", props));
|
|
|
+// /*通过id进行分表*/
|
|
|
+// Properties props1 = new Properties();
|
|
|
+// props1.setProperty("algorithm-expression", "t_teacher_${id % 2}");
|
|
|
+// result.getShardingAlgorithms().put("teacher_id_inline", new AlgorithmConfiguration("INLINE", props1));
|
|
|
+// /*测试join跨库连表*/
|
|
|
+ Properties props2 = new Properties();
|
|
|
+ props2.setProperty("algorithm-expression", "test0");
|
|
|
+ result.getShardingAlgorithms().put("test0_inline", new AlgorithmConfiguration("INLINE", props2));
|
|
|
+ Properties props3 = new Properties();
|
|
|
+ props3.setProperty("algorithm-expression", "test1");
|
|
|
+ result.getShardingAlgorithms().put("test1_inline", new AlgorithmConfiguration("INLINE", props3));
|
|
|
+
|
|
|
+ //默认分库策略
|
|
|
+// result.setDefaultDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("id", "default_database_id_inline"));
|
|
|
+ //默认分表策略
|
|
|
+ result.setDefaultTableShardingStrategy(new NoneShardingStrategyConfiguration());
|
|
|
+ /*默认分片列*/
|
|
|
+// result.setDefaultShardingColumn("id");
|
|
|
+ /*keyGenerators*/
|
|
|
result.getKeyGenerators().put("snowflake", new AlgorithmConfiguration("SNOWFLAKE", new Properties()));
|
|
|
- result.getAuditors().put("sharding_key_required_auditor", new AlgorithmConfiguration("DML_SHARDING_CONDITIONS", new Properties()));
|
|
|
+ /*auditors*/
|
|
|
+// result.getAuditors().put("sharding_key_required_auditor", new AlgorithmConfiguration("DML_SHARDING_CONDITIONS", new Properties()));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ //join表
|
|
|
+ private ShardingTableRuleConfiguration getJoinOne() {
|
|
|
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_student", "test0.t_student");
|
|
|
+ result.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("", "test0_inline"));
|
|
|
+ result.setTableShardingStrategy(new NoneShardingStrategyConfiguration());
|
|
|
+// result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
|
|
|
+// result.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ //join表
|
|
|
+ private ShardingTableRuleConfiguration getJoinTwo() {
|
|
|
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("kws_user", "test1.kws_user");
|
|
|
+ result.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("", "test1_inline"));
|
|
|
+ result.setTableShardingStrategy(new NoneShardingStrategyConfiguration());
|
|
|
+// result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
|
|
|
+// result.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ //分库不分表
|
|
|
private ShardingTableRuleConfiguration getOrderTableRuleConfiguration() {
|
|
|
- ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_student", "t_student_${[0, 1]}");
|
|
|
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_teacher", "test_${0..1}.t_teacher_${0..1}");
|
|
|
+ result.setTableShardingStrategy(new StandardShardingStrategyConfiguration("id", "teacher_id_inline"));
|
|
|
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
|
|
|
result.setAuditStrategy(new ShardingAuditStrategyConfiguration(Collections.singleton("sharding_key_required_auditor"), true));
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 分库不分表
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private ShardingTableRuleConfiguration getOrderItemTableRuleConfiguration2() {
|
|
|
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_teacher", "test0.t_teacher");
|
|
|
+// result.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("id", "default_database_id_inline"));
|
|
|
+// result.setTableShardingStrategy(new NoneShardingStrategyConfiguration());
|
|
|
+ result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 分库不分表
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private ShardingTableRuleConfiguration getOrderItemTableRuleConfiguration() {
|
|
|
- ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_teacher", "test{0..1}.t_teacher_${[0, 1]}");
|
|
|
+ ShardingTableRuleConfiguration result = new ShardingTableRuleConfiguration("t_student", "test1.t_student");
|
|
|
+// result.setDatabaseShardingStrategy(new StandardShardingStrategyConfiguration("id", "default_database_id_inline"));
|
|
|
+ result.setTableShardingStrategy(new NoneShardingStrategyConfiguration());
|
|
|
result.setKeyGenerateStrategy(new KeyGenerateStrategyConfiguration("id", "snowflake"));
|
|
|
return result;
|
|
|
}
|