You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2021/08/31 12:33:18 UTC

[shardingsphere] branch master updated: API standardization. (#12132)

This is an automated email from the ASF dual-hosted git repository.

panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 57c3859  API standardization. (#12132)
57c3859 is described below

commit 57c38598dee30716ffed290963f8c75406748ecb
Author: gin <ja...@163.com>
AuthorDate: Tue Aug 31 20:32:01 2021 +0800

    API standardization. (#12132)
    
    * API standardization.
    
    * Optimization name and add test method.
---
 .../column/ColumnRegexMatchShadowAlgorithm.java    |  8 +++----
 .../shardingsphere/shadow/rule/ShadowRule.java     | 10 ++++-----
 .../shadow/rule/ShadowTableRule.java               |  2 +-
 ...ableRuleChecker.java => ShadowRuleChecker.java} |  2 +-
 .../table/ShadowTableConfigurationYamlSwapper.java |  4 +++-
 ...CheckerTest.java => ShadowRuleCheckerTest.java} | 22 ++++++++++++++++---
 .../PropertiesShadowSpringBootStarterTest.java     | 22 +++++++++++++------
 .../boot/YmlShadowSpringBootStarterTest.java       | 22 +++++++++++++------
 .../application-shadow-properties.properties       | 25 ++++++++++------------
 .../src/test/resources/application-shadow-yml.yml  | 20 ++++++++---------
 .../ShadowAlgorithmSpringNamespaceTest.java        | 17 +++++++++++----
 .../namespace/ShadowSpringNamespaceTest.java       |  1 +
 .../shadow-algorithm-application-context.xml       | 16 +++++++-------
 13 files changed, 108 insertions(+), 63 deletions(-)

diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchShadowAlgorithm.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchShadowAlgorithm.java
index 129d5de..271e59b 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchShadowAlgorithm.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/algorithm/shadow/column/ColumnRegexMatchShadowAlgorithm.java
@@ -63,13 +63,13 @@ public final class ColumnRegexMatchShadowAlgorithm implements ColumnShadowAlgori
     }
     
     private void checkRegex() {
-        String expression = props.getProperty(REGEX);
-        Preconditions.checkNotNull(expression, "Column regex match shadow algorithm regex cannot be null.");
+        String regex = props.getProperty(REGEX);
+        Preconditions.checkNotNull(regex, "Column regex match shadow algorithm regex cannot be null.");
     }
     
     private void checkColumn() {
-        String expression = props.getProperty(COLUMN);
-        Preconditions.checkNotNull(expression, "Column regex match shadow algorithm column cannot be null.");
+        String column = props.getProperty(COLUMN);
+        Preconditions.checkNotNull(column, "Column regex match shadow algorithm column cannot be null.");
     }
     
     private void checkOperation() {
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
index 28b342b..284e85c 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
@@ -25,7 +25,7 @@ import org.apache.shardingsphere.shadow.algorithm.config.AlgorithmProvidedShadow
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
 import org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
-import org.apache.shardingsphere.shadow.rule.checker.ShadowTableRuleChecker;
+import org.apache.shardingsphere.shadow.rule.checker.ShadowRuleChecker;
 import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
 import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
 
@@ -86,11 +86,11 @@ public final class ShadowRule implements FeatureRule, SchemaRule, DataSourceCont
     }
     
     private void initShadowTableRules(final Map<String, ShadowTableConfiguration> tables, final Map<String, ShadowAlgorithm> shadowAlgorithms) {
-        ShadowTableRuleChecker.checkShadowTables(tables);
+        ShadowRuleChecker.checkShadowTables(tables);
         tables.forEach((key, value) -> {
             Collection<String> tableShadowAlgorithmNames = value.getShadowAlgorithmNames();
             uselessShadowAlgorithmFilter(tableShadowAlgorithmNames, shadowAlgorithms);
-            ShadowTableRuleChecker.checkTableShadowAlgorithms(key, tableShadowAlgorithmNames, shadowAlgorithms);
+            ShadowRuleChecker.checkTableShadowAlgorithms(key, tableShadowAlgorithmNames, shadowAlgorithms);
             shadowTableRules.put(key, new ShadowTableRule(key, tableShadowAlgorithmNames));
         });
     }
@@ -100,12 +100,12 @@ public final class ShadowRule implements FeatureRule, SchemaRule, DataSourceCont
     }
     
     private void initShadowAlgorithms(final Map<String, ShadowAlgorithm> shadowAlgorithms) {
-        ShadowTableRuleChecker.checkShadowAlgorithms(shadowAlgorithms);
+        ShadowRuleChecker.checkShadowAlgorithms(shadowAlgorithms);
         this.shadowAlgorithms.putAll(shadowAlgorithms);
     }
     
     private void initShadowDataSourceMappings(final Map<String, ShadowDataSourceConfiguration> dataSources) {
-        ShadowTableRuleChecker.checkDataSources(dataSources);
+        ShadowRuleChecker.checkDataSources(dataSources);
         dataSources.forEach((key, value) -> shadowDataSourceMappings.put(value.getSourceDataSourceName(), value.getShadowDataSourceName()));
     }
     
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
index 86bd16e..d96e16c 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
@@ -29,7 +29,7 @@ import java.util.Collection;
 @Getter
 public final class ShadowTableRule {
     
-    private final String logicTableName;
+    private final String tableName;
     
     private final Collection<String> shadowAlgorithmNames;
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/checker/ShadowTableRuleChecker.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/checker/ShadowRuleChecker.java
similarity index 99%
rename from shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/checker/ShadowTableRuleChecker.java
rename to shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/checker/ShadowRuleChecker.java
index 0aa2c25..a389f44 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/checker/ShadowTableRuleChecker.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/rule/checker/ShadowRuleChecker.java
@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
 /**
  * Shadow table rule checker.
  */
-public final class ShadowTableRuleChecker {
+public final class ShadowRuleChecker {
     
     /**
      * Check data sources mappings size.
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/table/ShadowTableConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/table/ShadowTableConfigurationYamlSwapper.java
index 44f5dba..8962f85 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/table/ShadowTableConfigurationYamlSwapper.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/table/ShadowTableConfigurationYamlSwapper.java
@@ -21,6 +21,8 @@ import org.apache.shardingsphere.infra.yaml.config.swapper.YamlConfigurationSwap
 import org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
 import org.apache.shardingsphere.shadow.yaml.config.table.YamlShadowTableConfiguration;
 
+import java.util.LinkedList;
+
 /**
  * Shadow table configuration YAML swapper.
  */
@@ -35,6 +37,6 @@ public class ShadowTableConfigurationYamlSwapper implements YamlConfigurationSwa
     
     @Override
     public ShadowTableConfiguration swapToObject(final YamlShadowTableConfiguration yamlConfig) {
-        return new ShadowTableConfiguration(yamlConfig.getShadowAlgorithmNames());
+        return new ShadowTableConfiguration(new LinkedList<>(yamlConfig.getShadowAlgorithmNames()));
     }
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/rule/checker/ShadowTableRuleCheckerTest.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/rule/checker/ShadowRuleCheckerTest.java
similarity index 84%
rename from shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/rule/checker/ShadowTableRuleCheckerTest.java
rename to shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/rule/checker/ShadowRuleCheckerTest.java
index d9242a0..7d58606 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/rule/checker/ShadowTableRuleCheckerTest.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/rule/checker/ShadowRuleCheckerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.shadow.rule.checker;
 
+import com.google.common.collect.Maps;
 import org.apache.shardingsphere.shadow.algorithm.shadow.column.ColumnRegexMatchShadowAlgorithm;
 import org.apache.shardingsphere.shadow.algorithm.shadow.note.SimpleSQLNoteShadowAlgorithm;
 import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
@@ -28,13 +29,28 @@ import java.util.LinkedList;
 import java.util.Map;
 import java.util.Properties;
 
-public final class ShadowTableRuleCheckerTest {
+public final class ShadowRuleCheckerTest {
+    
+    @Test(expected = IllegalStateException.class)
+    public void assertCheckDataSources() {
+        ShadowRuleChecker.checkDataSources(Maps.newLinkedHashMap());
+    }
+    
+    @Test(expected = IllegalStateException.class)
+    public void assertCheckShadowTables() {
+        ShadowRuleChecker.checkShadowTables(Maps.newLinkedHashMap());
+    }
+    
+    @Test(expected = IllegalStateException.class)
+    public void assertCheckShadowAlgorithms() {
+        ShadowRuleChecker.checkShadowAlgorithms(Maps.newLinkedHashMap());
+    }
     
     @Test
     public void assertCheckTableShadowAlgorithmsPass() {
         Collection<String> tableShadowAlgorithmNames = createTableShadowAlgorithmNames();
         Map<String, ShadowAlgorithm> shadowAlgorithms = createShadowAlgorithms(tableShadowAlgorithmNames);
-        ShadowTableRuleChecker.checkTableShadowAlgorithms("t_user", tableShadowAlgorithmNames, shadowAlgorithms);
+        ShadowRuleChecker.checkTableShadowAlgorithms("t_user", tableShadowAlgorithmNames, shadowAlgorithms);
     }
     
     @Test(expected = IllegalStateException.class)
@@ -42,7 +58,7 @@ public final class ShadowTableRuleCheckerTest {
         Collection<String> tableShadowAlgorithmNames = createTableShadowAlgorithmNames();
         tableShadowAlgorithmNames.add("order-id-insert-regex-algorithm");
         Map<String, ShadowAlgorithm> shadowAlgorithms = createShadowAlgorithms(tableShadowAlgorithmNames);
-        ShadowTableRuleChecker.checkTableShadowAlgorithms("t_user", tableShadowAlgorithmNames, shadowAlgorithms);
+        ShadowRuleChecker.checkTableShadowAlgorithms("t_user", tableShadowAlgorithmNames, shadowAlgorithms);
     }
     
     private Map<String, ShadowAlgorithm> createShadowAlgorithms(final Collection<String> tableShadowAlgorithmNames) {
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/PropertiesShadowSpringBootStarterTest.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/PropertiesShadowSpringBootStarterTest.java
index 33590a3..d6838a8 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/PropertiesShadowSpringBootStarterTest.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/PropertiesShadowSpringBootStarterTest.java
@@ -57,22 +57,32 @@ public class PropertiesShadowSpringBootStarterTest {
     }
     
     private void assertShadowAlgorithms(final Map<String, ShadowAlgorithm> shadowAlgorithms) {
-        assertThat(shadowAlgorithms.get("t-order-user-id-algorithm") instanceof ColumnRegexMatchShadowAlgorithm, is(true));
-        assertThat(shadowAlgorithms.get("t-order-note-algorithm") instanceof SimpleSQLNoteShadowAlgorithm, is(true));
+        ShadowAlgorithm userIdMatchAlgorithm = shadowAlgorithms.get("user-id-match-algorithm");
+        assertThat(userIdMatchAlgorithm instanceof ColumnRegexMatchShadowAlgorithm, is(true));
+        assertThat(userIdMatchAlgorithm.getType(), is("COLUMN_REGEX_MATCH"));
+        assertThat(userIdMatchAlgorithm.getProps().get("operation"), is("insert"));
+        assertThat(userIdMatchAlgorithm.getProps().get("column"), is("user_id"));
+        assertThat(userIdMatchAlgorithm.getProps().get("regex"), is("[1]"));
+        ShadowAlgorithm simpleNoteAlgorithm = shadowAlgorithms.get("simple-note-algorithm");
+        assertThat(simpleNoteAlgorithm instanceof SimpleSQLNoteShadowAlgorithm, is(true));
+        assertThat(simpleNoteAlgorithm.getType(), is("SIMPLE_NOTE"));
+        assertThat(simpleNoteAlgorithm.getProps().get("shadow"), is("true"));
+        assertThat(simpleNoteAlgorithm.getProps().get("foo"), is("bar"));
     }
     
     private void assertShadowTables(final Map<String, ShadowTableConfiguration> shadowTables) {
         assertThat(shadowTables.size(), is(2));
-        assertThat(shadowTables.get("t_order").getShadowAlgorithmNames(), is(Arrays.asList("t-order-user-id-algorithm", "t-order-note-algorithm", "t-order-note-algorithm")));
-        assertThat(shadowTables.get("t_user").getShadowAlgorithmNames(), is(Arrays.asList("t-order-user-id-algorithm", "t-order-note-algorithm")));
+        assertThat(shadowTables.get("t_order").getShadowAlgorithmNames(), is(Arrays.asList("user-id-match-algorithm", "simple-note-algorithm")));
+        assertThat(shadowTables.get("t_user").getShadowAlgorithmNames(), is(Arrays.asList("simple-note-algorithm")));
     }
     
     private void assertShadowDataSources(final Map<String, ShadowDataSourceConfiguration> dataSources) {
         assertThat(dataSources.size(), is(1));
-        assertThat(dataSources.get("shadow-data-source").getSourceDataSourceName(), is("ds0"));
-        assertThat(dataSources.get("shadow-data-source").getShadowDataSourceName(), is("ds0-shadow"));
+        assertThat(dataSources.get("shadow-data-source").getSourceDataSourceName(), is("ds"));
+        assertThat(dataSources.get("shadow-data-source").getShadowDataSourceName(), is("ds-shadow"));
     }
     
+    // fixme remove method when the api refactoring is complete
     private void assertBasicShadowRule(final String column, final List<String> sourceDataSourceNames, final List<String> shadowDataSourceNames) {
         assertThat(column, is("shadow"));
         assertThat(sourceDataSourceNames, is(Arrays.asList("ds", "ds1")));
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/YmlShadowSpringBootStarterTest.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/YmlShadowSpringBootStarterTest.java
index 90707d7..d7c32ae 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/YmlShadowSpringBootStarterTest.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/java/org/apache/shardingsphere/shadow/spring/boot/YmlShadowSpringBootStarterTest.java
@@ -57,22 +57,32 @@ public class YmlShadowSpringBootStarterTest {
     }
     
     private void assertShadowAlgorithms(final Map<String, ShadowAlgorithm> shadowAlgorithms) {
-        assertThat(shadowAlgorithms.get("t-order-user-id-algorithm") instanceof ColumnRegexMatchShadowAlgorithm, is(true));
-        assertThat(shadowAlgorithms.get("t-order-note-algorithm") instanceof SimpleSQLNoteShadowAlgorithm, is(true));
+        ShadowAlgorithm userIdMatchAlgorithm = shadowAlgorithms.get("user-id-match-algorithm");
+        assertThat(userIdMatchAlgorithm instanceof ColumnRegexMatchShadowAlgorithm, is(true));
+        assertThat(userIdMatchAlgorithm.getType(), is("COLUMN_REGEX_MATCH"));
+        assertThat(userIdMatchAlgorithm.getProps().get("operation"), is("insert"));
+        assertThat(userIdMatchAlgorithm.getProps().get("column"), is("user_id"));
+        assertThat(userIdMatchAlgorithm.getProps().get("regex"), is("[1]"));
+        ShadowAlgorithm simpleNoteAlgorithm = shadowAlgorithms.get("simple-note-algorithm");
+        assertThat(simpleNoteAlgorithm instanceof SimpleSQLNoteShadowAlgorithm, is(true));
+        assertThat(simpleNoteAlgorithm.getType(), is("SIMPLE_NOTE"));
+        assertThat(simpleNoteAlgorithm.getProps().get("shadow"), is(true));
+        assertThat(simpleNoteAlgorithm.getProps().get("foo"), is("bar"));
     }
     
     private void assertShadowTables(final Map<String, ShadowTableConfiguration> shadowTables) {
         assertThat(shadowTables.size(), is(2));
-        assertThat(shadowTables.get("t_order").getShadowAlgorithmNames(), is(Arrays.asList("t-order-user-id-algorithm", "t-order-note-algorithm")));
-        assertThat(shadowTables.get("t_user").getShadowAlgorithmNames(), is(Arrays.asList("t-order-user-id-algorithm", "t-order-note-algorithm")));
+        assertThat(shadowTables.get("t_order").getShadowAlgorithmNames(), is(Arrays.asList("user-id-match-algorithm", "simple-note-algorithm")));
+        assertThat(shadowTables.get("t_user").getShadowAlgorithmNames(), is(Arrays.asList("simple-note-algorithm")));
     }
     
     private void assertShadowDataSources(final Map<String, ShadowDataSourceConfiguration> dataSources) {
         assertThat(dataSources.size(), is(1));
-        assertThat(dataSources.get("shadow-data-source").getSourceDataSourceName(), is("ds-write-0"));
-        assertThat(dataSources.get("shadow-data-source").getShadowDataSourceName(), is("ds-write-0-shadow"));
+        assertThat(dataSources.get("shadow-data-source").getSourceDataSourceName(), is("ds"));
+        assertThat(dataSources.get("shadow-data-source").getShadowDataSourceName(), is("ds-shadow"));
     }
     
+    // fixme remove method when the api refactoring is complete
     private void assertBasicShadowRule(final String column, final List<String> sourceDataSourceNames, final List<String> shadowDataSourceNames) {
         assertThat(column, is("shadow"));
         assertThat(sourceDataSourceNames, is(Arrays.asList("ds", "ds1")));
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-properties.properties b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-properties.properties
index b44dca1..396a74d 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-properties.properties
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-properties.properties
@@ -19,20 +19,17 @@ spring.shardingsphere.rules.shadow.column=shadow
 spring.shardingsphere.rules.shadow.sourceDataSourceNames=ds,ds1
 spring.shardingsphere.rules.shadow.shadowDataSourceNames=shadow_ds,shadow_ds1
 
-spring.shardingsphere.rules.shadow.data-sources.shadow-data-source.source-data-source-name=ds0
-spring.shardingsphere.rules.shadow.data-sources.shadow-data-source.shadow-data-source-name=ds0-shadow
+spring.shardingsphere.rules.shadow.data-sources.shadow-data-source.source-data-source-name=ds
+spring.shardingsphere.rules.shadow.data-sources.shadow-data-source.shadow-data-source-name=ds-shadow
 
-spring.shardingsphere.rules.shadow.tables.t_order.shadow-algorithm-names[0]=t-order-user-id-algorithm
-spring.shardingsphere.rules.shadow.tables.t_order.shadow-algorithm-names[1]=t-order-note-algorithm
-spring.shardingsphere.rules.shadow.tables.t_order.shadow-algorithm-names[2]=t-order-note-algorithm
+spring.shardingsphere.rules.shadow.tables.t_order.shadow-algorithm-names=user-id-match-algorithm,simple-note-algorithm
+spring.shardingsphere.rules.shadow.tables.t_user.shadow-algorithm-names=simple-note-algorithm
 
-spring.shardingsphere.rules.shadow.tables.t_user.shadow-algorithm-names[0]=t-order-user-id-algorithm
-spring.shardingsphere.rules.shadow.tables.t_user.shadow-algorithm-names[1]=t-order-note-algorithm
+spring.shardingsphere.rules.shadow.shadow-algorithms.user-id-match-algorithm.type=COLUMN_REGEX_MATCH
+spring.shardingsphere.rules.shadow.shadow-algorithms.user-id-match-algorithm.props.operation=insert
+spring.shardingsphere.rules.shadow.shadow-algorithms.user-id-match-algorithm.props.column=user_id
+spring.shardingsphere.rules.shadow.shadow-algorithms.user-id-match-algorithm.props.regex=[1]
 
-spring.shardingsphere.rules.shadow.shadow-algorithms.t-order-user-id-algorithm.type=COLUMN_REGEX_MATCH
-spring.shardingsphere.rules.shadow.shadow-algorithms.t-order-user-id-algorithm.props.column=user_id
-spring.shardingsphere.rules.shadow.shadow-algorithms.t-order-user-id-algorithm.props.operation=INSERT
-spring.shardingsphere.rules.shadow.shadow-algorithms.t-order-user-id-algorithm.props.regex=[a]
-
-spring.shardingsphere.rules.shadow.shadow-algorithms.t-order-note-algorithm.type=SIMPLE_NOTE
-spring.shardingsphere.rules.shadow.shadow-algorithms.t-order-note-algorithm.props.shadow=true
+spring.shardingsphere.rules.shadow.shadow-algorithms.simple-note-algorithm.type=SIMPLE_NOTE
+spring.shardingsphere.rules.shadow.shadow-algorithms.simple-note-algorithm.props.shadow=true
+spring.shardingsphere.rules.shadow.shadow-algorithms.simple-note-algorithm.props.foo=bar
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-yml.yml b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-yml.yml
index 84dd3e8..1a5dc49 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-yml.yml
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-boot-starter/src/test/resources/application-shadow-yml.yml
@@ -26,25 +26,25 @@ spring:
         enable: true
         data-sources:
           shadow-data-source:
-            source-data-source-name: ds-write-0
-            shadow-data-source-name: ds-write-0-shadow
+            source-data-source-name: ds
+            shadow-data-source-name: ds-shadow
         tables:
           t_order:
             shadow-algorithm-names:
-              - t-order-user-id-algorithm
-              - t-order-note-algorithm
+              - user-id-match-algorithm
+              - simple-note-algorithm
           t_user:
             shadow-algorithm-names:
-              - t-order-user-id-algorithm
-              - t-order-note-algorithm
+              - simple-note-algorithm
         shadow-algorithms:
-          t-order-user-id-algorithm:
+          user-id-match-algorithm:
             type: COLUMN_REGEX_MATCH
             props:
-              operation: INSERT
+              operation: insert
               column: user_id
-              regex: aa
-          t-order-note-algorithm:
+              regex: "[1]"
+          simple-note-algorithm:
             type: SIMPLE_NOTE
             props:
               shadow: true
+              foo: bar
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowAlgorithmSpringNamespaceTest.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowAlgorithmSpringNamespaceTest.java
index 6f42032..119ad52 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowAlgorithmSpringNamespaceTest.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowAlgorithmSpringNamespaceTest.java
@@ -51,14 +51,23 @@ public final class ShadowAlgorithmSpringNamespaceTest extends AbstractJUnit4Spri
     }
     
     private void assertShadowAlgorithms(final Map<String, ShadowAlgorithm> shadowAlgorithms) {
-        assertThat(shadowAlgorithms.get("columnRegularMatchShadowAlgorithm") instanceof ColumnRegexMatchShadowAlgorithm, is(true));
-        assertThat(shadowAlgorithms.get("noteShadowAlgorithm") instanceof SimpleSQLNoteShadowAlgorithm, is(true));
+        ShadowAlgorithm userIdMatchAlgorithm = shadowAlgorithms.get("user-id-match-algorithm");
+        assertThat(userIdMatchAlgorithm instanceof ColumnRegexMatchShadowAlgorithm, is(true));
+        assertThat(userIdMatchAlgorithm.getType(), is("COLUMN_REGEX_MATCH"));
+        assertThat(userIdMatchAlgorithm.getProps().get("operation"), is("insert"));
+        assertThat(userIdMatchAlgorithm.getProps().get("column"), is("user_id"));
+        assertThat(userIdMatchAlgorithm.getProps().get("regex"), is("[1]"));
+        ShadowAlgorithm simpleNoteAlgorithm = shadowAlgorithms.get("simple-note-algorithm");
+        assertThat(simpleNoteAlgorithm instanceof SimpleSQLNoteShadowAlgorithm, is(true));
+        assertThat(simpleNoteAlgorithm.getType(), is("SIMPLE_NOTE"));
+        assertThat(simpleNoteAlgorithm.getProps().get("shadow"), is("true"));
+        assertThat(simpleNoteAlgorithm.getProps().get("foo"), is("bar"));
     }
     
     private void assertShadowTables(final Map<String, ShadowTableConfiguration> shadowTables) {
         assertThat(shadowTables.size(), is(2));
-        assertThat(shadowTables.get("t_order").getShadowAlgorithmNames(), is(Arrays.asList("columnRegularMatchShadowAlgorithm", "noteShadowAlgorithm")));
-        assertThat(shadowTables.get("t_user").getShadowAlgorithmNames(), is(Arrays.asList("columnRegularMatchShadowAlgorithm", "noteShadowAlgorithm")));
+        assertThat(shadowTables.get("t_order").getShadowAlgorithmNames(), is(Arrays.asList("user-id-match-algorithm", "simple-note-algorithm")));
+        assertThat(shadowTables.get("t_user").getShadowAlgorithmNames(), is(Arrays.asList("simple-note-algorithm")));
     }
     
     private void assertShadowDataSources(final Map<String, ShadowDataSourceConfiguration> dataSources) {
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowSpringNamespaceTest.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowSpringNamespaceTest.java
index 000d505..adb0d70 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowSpringNamespaceTest.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/java/org/apache/shardingsphere/shadow/spring/namespace/ShadowSpringNamespaceTest.java
@@ -45,6 +45,7 @@ public final class ShadowSpringNamespaceTest extends AbstractJUnit4SpringContext
         assertTrue(shadowRule.getShadowAlgorithms().isEmpty());
     }
     
+    // fixme remove method when the api refactoring is complete
     private void assertBasicShadowRule(final String column, final List<String> sourceDataSourceNames, final List<String> shadowDataSourceNames) {
         assertThat(column, is("shadow"));
         assertThat(sourceDataSourceNames, is(Arrays.asList("ds", "ds1")));
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/resources/META-INF/spring/shadow-algorithm-application-context.xml b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/resources/META-INF/spring/shadow-algorithm-application-context.xml
index 6bb6b83..903fe6b 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/resources/META-INF/spring/shadow-algorithm-application-context.xml
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-spring/shardingsphere-shadow-spring-namespace/src/test/resources/META-INF/spring/shadow-algorithm-application-context.xml
@@ -25,28 +25,28 @@
                            http://shardingsphere.apache.org/schema/shardingsphere/shadow/shadow.xsd
                            ">
 
-    <shadow:shadow-algorithm id="columnRegularMatchShadowAlgorithm" type="COLUMN_REGEX_MATCH">
+    <shadow:shadow-algorithm id="user-id-match-algorithm" type="COLUMN_REGEX_MATCH">
         <props>
+            <prop key="operation">insert</prop>
             <prop key="column">user_id</prop>
-            <prop key="regex">[a]</prop>
-            <prop key="operation">UPDATE</prop>
+            <prop key="regex">[1]</prop>
         </props>
     </shadow:shadow-algorithm>
-    <shadow:shadow-algorithm id="noteShadowAlgorithm" type="SIMPLE_NOTE">
+    <shadow:shadow-algorithm id="simple-note-algorithm" type="SIMPLE_NOTE">
         <props>
             <prop key="shadow">true</prop>
+            <prop key="foo">bar</prop>
         </props>
     </shadow:shadow-algorithm>
 
     <shadow:rule id="shadowRule" enable="true" column="shadow" sourceDataSourceNames="ds0,ds1" shadowDataSourceNames="shadow_ds0,shadow_ds1">
         <shadow:data-source id="shadow-data-source" source-data-source-name="ds" shadow-data-source-name="ds-shadow"/>
         <shadow:table name="t_order">
-            <shadow:table-algorithm shadow-algorithm-ref= "columnRegularMatchShadowAlgorithm" />
-            <shadow:table-algorithm shadow-algorithm-ref= "noteShadowAlgorithm" />
+            <shadow:table-algorithm shadow-algorithm-ref= "user-id-match-algorithm" />
+            <shadow:table-algorithm shadow-algorithm-ref= "simple-note-algorithm" />
         </shadow:table>
         <shadow:table name="t_user">
-            <shadow:table-algorithm shadow-algorithm-ref= "columnRegularMatchShadowAlgorithm" />
-            <shadow:table-algorithm shadow-algorithm-ref= "noteShadowAlgorithm" />
+            <shadow:table-algorithm shadow-algorithm-ref= "simple-note-algorithm" />
         </shadow:table>
     </shadow:rule>
 </beans>