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 2022/06/29 02:35:35 UTC

[shardingsphere] branch master updated: Refactor readwrite-splitting api (#18629)

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 8cff36538b8 Refactor readwrite-splitting api (#18629)
8cff36538b8 is described below

commit 8cff36538b84347487064f4ba2f34e39421e4d2f
Author: zhaojinchao <zh...@apache.org>
AuthorDate: Wed Jun 29 10:35:28 2022 +0800

    Refactor readwrite-splitting api (#18629)
    
    * Refactor readwrite-splitting api for yaml and boot-starter
    
    * Update configuration
    
    * Fix ci
    
    * Fix ci
    
    * Fix ci
    
    * Chande api for example
    
    * Change xml configuration
    
    * fix example
    
    * Fix ci
    
    * Fix ci
    
    * Fix test
    
    * Modify configuration for proxy
    
    * Modify api about rd
    
    * Fixed
    
    * fix example
    
    * Fix ci
    
    * Remove unless code
    
    * Add final
    
    * Add final
---
 .../jdbc/java/config/readwrite-splitting.ftl       |  7 +-
 .../resources/properties/readwrite-splitting.ftl   |  5 +-
 .../jdbc/resources/xml/readwrite-splitting.ftl     |  5 +-
 .../template/proxy/feature/readwrite-splitting.ftl |  9 +--
 ...dingReadwriteSplittingConfigurationPrecise.java | 14 ++--
 ...ardingReadwriteSplittingConfigurationRange.java | 14 ++--
 .../sharding-readwrite-splitting-range.yaml        | 18 ++---
 .../META-INF/sharding-readwrite-splitting.yaml     | 18 ++---
 ...ication-sharding-readwrite-splitting.properties | 10 ++-
 ...ication-sharding-readwrite-splitting.properties | 10 ++-
 .../application-sharding-readwrite-splitting.xml   | 14 ++--
 .../application-sharding-readwrite-splitting.xml   | 14 ++--
 .../LocalReadwriteSplittingConfiguration.java      | 12 ++--
 ...calShardingReadwriteSplittingConfiguration.java |  7 +-
 .../zookeeper/local/readwrite-splitting.yaml       |  9 +--
 ...-local-zookeeper-readwrite-splitting.properties |  5 +-
 .../local/application-readwrite-splitting.xml      |  7 +-
 .../config/ReadwriteSplittingConfiguration.java    | 12 ++--
 .../resources/META-INF/readwrite-splitting.yaml    |  9 +--
 .../application-readwrite-splitting.properties     |  5 +-
 .../application-readwrite-splitting.properties     |  5 +-
 .../META-INF/application-readwrite-splitting.xml   |  7 +-
 .../META-INF/application-readwrite-splitting.xml   |  7 +-
 ...plication-shadow-readwrite-splitting.properties |  5 +-
 .../application-shadow-readwrite-splitting.xml     |  7 +-
 .../resources/conf/config-readwrite-splitting.yaml |  9 +--
 .../src/main/resources/conf/config-write-only.yaml |  9 +--
 ...dwriteSplittingDataSourceRuleConfiguration.java | 36 ++--------
 ...icReadwriteSplittingStrategyConfiguration.java} | 22 +++---
 ...icReadwriteSplittingStrategyConfiguration.java} | 19 +++--
 .../ReplicaLoadBalanceAlgorithmFactory.java        |  2 +-
 ...ReadwriteSplittingRuleConfigurationChecker.java |  6 +-
 .../rule/ReadwriteSplittingDataSourceRule.java     |  2 +-
 .../ReadwriteSplittingStrategyFactory.java         | 33 ++++-----
 ...dwriteSplittingDataSourceRuleConfiguration.java |  8 +--
 ...icReadwriteSplittingStrategyConfiguration.java} | 14 ++--
 ...mlReadwriteSplittingStrategyConfiguration.java} | 14 ++--
 ...icReadwriteSplittingStrategyConfiguration.java} | 14 ++--
 ...eAlgorithmProviderConfigurationYamlSwapper.java | 17 ++++-
 ...writeSplittingRuleConfigurationYamlSwapper.java | 17 ++++-
 ...eSplittingStrategyConfigurationYamlSwapper.java | 47 +++++++++++++
 ...eSplittingStrategyConfigurationYamlSwapper.java | 47 +++++++++++++
 ...writeSplittingRuleConfigurationCheckerTest.java | 13 +---
 ...writeSplittingRuleConfigurationCheckerTest.java | 13 +---
 .../route/ReadwriteSplittingSQLRouterTest.java     | 24 +++----
 ...teSplittingDataSourceRuleConfigurationTest.java | 45 +++++-------
 .../rule/ReadwriteSplittingDataSourceRuleTest.java | 26 +++----
 .../rule/ReadwriteSplittingRuleTest.java           | 10 +--
 ...mProvidedReadwriteSplittingRuleBuilderTest.java | 14 ++--
 .../builder/ReadwriteSplittingRuleBuilderTest.java | 15 ++--
 ...orithmProviderConfigurationYamlSwapperTest.java | 25 +++----
 ...eSplittingRuleConfigurationYamlSwapperTest.java | 38 +++++-----
 ...amlReadwriteSplittingRuleConfigurationTest.java | 11 +--
 .../resources/yaml/readwrite-splitting-rule.yaml   | 18 ++---
 .../ReadwriteSplittingRuleStatementConverter.java  | 28 +++-----
 .../ReadwriteSplittingRuleQueryResultSet.java      | 16 +++--
 ...adwriteSplittingRuleStatementConverterTest.java | 30 ++++----
 .../ReadwriteSplittingRuleQueryResultSetTest.java  | 21 +++---
 ...ReadwriteSplittingRuleStatementUpdaterTest.java | 11 +--
 ...ReadwriteSplittingRuleStatementUpdaterTest.java | 11 +--
 ...ReadwriteSplittingRuleStatementUpdaterTest.java | 13 ++--
 .../ReadwriteSplittingSpringBootStarterTest.java   | 17 +++--
 .../application-readwrite-splitting.properties     |  9 ++-
 ...ReadwriteSplittingRuleBeanDefinitionParser.java | 45 +++++++++---
 .../ReadwriteSplittingRuleBeanDefinitionTag.java   |  4 --
 ...ynamicReadwriteSplittingBeanDefinitionTag.java} | 18 ++---
 ...StaticReadwriteSplittingBeanDefinitionTag.java} | 18 ++---
 .../META-INF/namespace/readwrite-splitting.xsd     | 24 +++++--
 .../ReadwriteSplittingSpringNamespaceTest.java     | 12 ++--
 .../readwrite-splitting-application-context.xml    | 16 ++---
 .../config/config-readwrite-splitting.yaml         |  8 +--
 .../src/test/resources/application.properties      |  5 +-
 .../resources/spring/included/rules-context.xml    | 14 ++--
 ...iteSplittingRuleConfigurationImportChecker.java | 17 ++---
 .../rql/rule/RulesUsedResourceQueryResultSet.java  | 12 ++--
 .../config/ProxyConfigurationLoaderTest.java       |  7 +-
 .../swapper/YamlProxyConfigurationSwapperTest.java |  9 +--
 .../rql/DatabaseRulesCountResultSetTest.java       |  5 +-
 .../rql/RulesUsedResourceQueryResultSetTest.java   | 12 +---
 .../config_loader/config-readwrite-splitting.yaml  |  9 +--
 .../conf/import/config-readwrite-splitting.yaml    |  9 +--
 .../conf/swap/config-readwrite-splitting.yaml      |  8 +--
 .../resources/conf/config-readwrite-splitting.yaml | 18 ++---
 ...gWithReadwriteSplittingDataSourceWithProps.yaml |  9 +--
 ...thReadwriteSplittingDataSourceWithoutProps.yaml |  9 +--
 .../configWithDataSourceWithProps.yaml             | 16 ++---
 .../configWithDataSourceWithoutProps.yaml          | 16 ++---
 .../configWithoutDataSourceWithProps.yaml          | 16 ++---
 .../configWithoutDataSourceWithoutProps.yaml       | 16 ++---
 .../src/test/resources/yaml/unit/sharding.yaml     |  8 +--
 .../config-dbtbl-with-readwrite-splitting.yaml     | 80 +++++++++++-----------
 .../config-dbtbl-with-readwrite-splitting.yaml     | 80 +++++++++++-----------
 .../dbtbl_with_readwrite_splitting/rules.yaml      | 80 +++++++++++-----------
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 80 +++++++++++-----------
 ...dbtbl-with-readwrite-splitting-and-encrypt.yaml | 80 +++++++++++-----------
 .../rules.yaml                                     | 80 +++++++++++-----------
 .../proxy/conf/mysql/config-empty-rules.yaml       |  8 +--
 .../proxy/conf/postgresql/config-empty-rules.yaml  |  8 +--
 .../conf/mysql/config-readwrite-splitting.yaml     |  9 +--
 .../postgresql/config-readwrite-splitting.yaml     |  9 +--
 .../env/scenario/readwrite_splitting/rules.yaml    |  9 +--
 101 files changed, 925 insertions(+), 917 deletions(-)

diff --git a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/readwrite-splitting.ftl b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/readwrite-splitting.ftl
index dfb04acc70c..0b37a5bbc38 100644
--- a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/readwrite-splitting.ftl
+++ b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/java/config/readwrite-splitting.ftl
@@ -14,12 +14,9 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-    
+
     private ReadwriteSplittingRuleConfiguration createReadwriteSplittingRuleConfiguration() {
-        Properties props = new Properties();
-        props.setProperty("write-data-source-name", "ds_0");
-        props.setProperty("read-data-source-names", "ds_1, ds_2");
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "Static", props, null);
+                "ds_0", new StaticReadwriteSplittingStrategyConfiguration("ds_0", Arrays.asList("ds_1", "ds_2")), null, null);
         return new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), Collections.emptyMap());
     }
diff --git a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/properties/readwrite-splitting.ftl b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/properties/readwrite-splitting.ftl
index 91cede3c27b..06b067b2b77 100644
--- a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/properties/readwrite-splitting.ftl
+++ b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/properties/readwrite-splitting.ftl
@@ -15,8 +15,7 @@
   ~ limitations under the License.
   -->
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=ds-0
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=ds-1,ds-2
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=ds-0
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=ds-1,ds-2
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=round_robin
 spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
diff --git a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/xml/readwrite-splitting.ftl b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/xml/readwrite-splitting.ftl
index 04b3744cbe0..3265b566f13 100644
--- a/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/xml/readwrite-splitting.ftl
+++ b/examples/shardingsphere-example-generator/src/main/resources/template/jdbc/resources/xml/readwrite-splitting.ftl
@@ -19,9 +19,6 @@
     
     <readwrite-splitting:rule id="readwriteSplittingRule">
         <readwrite-splitting:data-source-rule id="demo_ds" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">ds_0</prop>
-                <prop key="read-data-source-names">ds_1, ds_2</prop>
-            </props>
+            <readwrite-splitting:static-strategy id="staticStrategy" write-data-source-name="ds_0" read-data-source-names="ds_1, ds_2"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
diff --git a/examples/shardingsphere-example-generator/src/main/resources/template/proxy/feature/readwrite-splitting.ftl b/examples/shardingsphere-example-generator/src/main/resources/template/proxy/feature/readwrite-splitting.ftl
index 0f03c638aae..b97e00e7199 100644
--- a/examples/shardingsphere-example-generator/src/main/resources/template/proxy/feature/readwrite-splitting.ftl
+++ b/examples/shardingsphere-example-generator/src/main/resources/template/proxy/feature/readwrite-splitting.ftl
@@ -17,10 +17,11 @@
   - !READWRITE_SPLITTING
     dataSources:
       readwrite_ds:
-        type: Static
-        props:
-          write-data-source-name: write_ds
-          read-data-source-names: read_ds_0, read_ds_1
+        staticStrategy:
+          writeDataSourceName: write_ds
+          readDataSourceNames:
+            - read_ds_0
+            - read_ds_1
         loadBalancerName: read_balance
     loadBalancers:
       read_balance:
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/readwrite/splitting/raw/config/ShardingReadwriteSplittingConfigurationPrecise.java b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/shardi [...]
index 6880f87dec7..28491af01a9 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/readwrite/splitting/raw/config/ShardingReadwriteSplittingConfigurationPrecise.java
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/readwrite/splitting/raw/config/ShardingReadwriteSplittingConfigurationPrecise.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.example.core.api.DataSourceUtil;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 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.keygen.KeyGenerateStrategyConfiguration;
@@ -83,16 +84,11 @@ public final class ShardingReadwriteSplittingConfigurationPrecise implements Exa
     
     private static ReadwriteSplittingRuleConfiguration createReadwriteSplittingConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "Static", getReadwriteProperties(), "");
+                "ds_0", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds_0", Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1")),
+                null, "");
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_1", "Static", getReadwriteProperties(), "");
+                "ds_1", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds_1", Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1")),
+                null,"");
         return new ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, dataSourceConfiguration2), Collections.emptyMap());
     }
-    
-    private static Properties getReadwriteProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "demo_write_ds_0");
-        result.setProperty("read-data-source-names", "demo_write_ds_1_read_0, demo_write_ds_0_read_1");
-        return result;
-    }
 }
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/readwrite/splitting/raw/config/ShardingReadwriteSplittingConfigurationRange.java b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding [...]
index ede99a94401..12deedc6427 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/readwrite/splitting/raw/config/ShardingReadwriteSplittingConfigurationRange.java
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/sharding/readwrite/splitting/raw/config/ShardingReadwriteSplittingConfigurationRange.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.example.core.api.DataSourceUtil;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 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.keygen.KeyGenerateStrategyConfiguration;
@@ -83,16 +84,11 @@ public final class ShardingReadwriteSplittingConfigurationRange implements Examp
 
     private static ReadwriteSplittingRuleConfiguration createReadwriteSplittingConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "Static", getReadWriteProperties(), null);
+                "ds_0", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds_0",
+                Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1")), null, null);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_1", "", getReadWriteProperties(), null);
+                "ds_1", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds_1",
+                Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1")), null, null);
         return new ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, dataSourceConfiguration2), Collections.emptyMap());
     }
-    
-    private static Properties getReadWriteProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "demo_write_ds_0");
-        result.setProperty("read-data-source-names", "demo_write_ds_0_read_0, demo_write_ds_0_read_1");
-        return result;
-    }
 }
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting-range.yaml b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting-range.yaml
index ac7da130743..d03304fecae 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting-range.yaml
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting-range.yaml
@@ -101,16 +101,18 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: write_ds_0_read_0, write_ds_0_read_1
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - write_ds_0_read_0
+          - write_ds_0_read_1
       loadBalancerName: roundRobin
     ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: write_ds_1_read_0, write_ds_1_read_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - write_ds_1_read_0
+          - write_ds_1_read_1
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
index a30c4600b61..2bf88437c4e 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/sharding-readwrite-splitting.yaml
@@ -109,16 +109,18 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: write_ds_0_read_0, write_ds_0_read_1
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - write_ds_0_read_0
+          - write_ds_0_read_1
       loadBalancerName: roundRobin
     ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: write_ds_1_read_0, write_ds_1_read_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - write_ds_1_read_0
+          - write_ds_1_read_1
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
index 72d98cdf4dd..584779137f0 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-sharding-readwrite-splitting.properties
@@ -87,11 +87,9 @@ spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-inline.props.al
 spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-item-inline.type=INLINE
 spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-item-inline.props.algorithm-expression=t_order_item_$->{order_id % 2}
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.props.write-data-source-name=write-ds-0
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.props.read-data-source-names=write-ds-0-read-0,write-ds-0-read-1
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.props.write-data-source-name=write-ds-1
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.props.read-data-source-names=write-ds-1-read-0,write-ds-1-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.static-strategy.write-data-source-name=write-ds-0
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.static-strategy.read-data-source-names=write-ds-0-read-0,write-ds-0-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.static-strategy.write-data-source-name=write-ds-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.static-strategy.read-data-source-names=write-ds-1-read-0,write-ds-1-read-1
 
 spring.shardingsphere.props.sql-show=true
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
index 3893b8e9cde..cfd8d54ce14 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-sharding-readwrite-splitting.properties
@@ -88,9 +88,7 @@ spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-inline.props.al
 spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-item-inline.type=INLINE
 spring.shardingsphere.rules.sharding.sharding-algorithms.t-order-item-inline.props.algorithm-expression=t_order_item_$->{order_id % 2}
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.props.write-data-source-name=write-ds-0
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.props.read-data-source-names=write-ds-0-read-0, write-ds-0-read-1
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.props.write-data-source-name=write-ds-1
-spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.props.read-data-source-names=write-ds-1-read-0, write-ds-1-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.static-strategy.write-data-source-name=write-ds-0
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-0.static-strategy.read-data-source-names=write-ds-0-read-0, write-ds-0-read-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.static-strategy.write-data-source-name=write-ds-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.ds-1.static-strategy.read-data-source-names=write-ds-1-read-0, write-ds-1-read-1
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
index eda5fd2e028..56a16792129 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
@@ -147,17 +147,11 @@
         </sharding:broadcast-table-rules>
     </sharding:rule>
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_0" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds_0</prop>
-                <prop key="read-data-source-names">demo_write_ds_0_read_0, demo_write_ds_0_read_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_0" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="staticStrategyForDs0" write-data-source-name="demo_write_ds_0" read-data-source-names="demo_write_ds_0_read_0, demo_write_ds_0_read_1"/>
         </readwrite-splitting:data-source-rule>
-        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_1" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds_1</prop>
-                <prop key="read-data-source-names">demo_write_ds_1_read_0, demo_write_ds_1_read_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_1" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="staticStrategyForDs0" write-data-source-name="demo_write_ds_1" read-data-source-names="demo_write_ds_1_read_0, demo_write_ds_1_read_1"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
     
diff --git a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
index 1cfdea80478..56f544a869c 100644
--- a/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
+++ b/examples/shardingsphere-jdbc-example/mixed-feature-example/sharding-readwrite-splitting-example/sharding-readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-sharding-readwrite-splitting.xml
@@ -121,17 +121,11 @@
         </sharding:broadcast-table-rules>
     </sharding:rule>
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_0" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds_0</prop>
-                <prop key="read-data-source-names">demo_write_ds_0_read_0, demo_write_ds_0_read_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_0" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="StaticStrategyWithDs0" write-data-source-name="demo_write_ds_0" read-data-source-names="demo_write_ds_0_read_0, demo_write_ds_0_read_1"/>
         </readwrite-splitting:data-source-rule>
-        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_1" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds_1</prop>
-                <prop key="read-data-source-names">demo_write_ds_1_read_0, demo_write_ds_1_read_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_readwrite_ds_1" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="StaticStrategyWithDs1" write-data-source-name="demo_write_ds_1" read-data-source-names="demo_write_ds_1_read_0, demo_write_ds_1_read_1"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
     
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
index 419fa8f6f42..ac4afe8456e 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalReadwriteSplittingConfiguration.java
@@ -23,12 +23,14 @@ import org.apache.shardingsphere.example.core.api.DataSourceUtil;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Arrays;
 import java.util.Properties;
 
 public final class LocalReadwriteSplittingConfiguration implements ExampleConfiguration {
@@ -42,18 +44,12 @@ public final class LocalReadwriteSplittingConfiguration implements ExampleConfig
     @Override
     public DataSource getDataSource() throws SQLException {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "demo_readwrite_splitting_ds", "Static", getReadProperties(), null);
+                "demo_readwrite_splitting_ds", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds",
+                Arrays.asList("demo_read_ds_0", "demo_read_ds_1")), null, null);
         ReadwriteSplittingRuleConfiguration ruleConfig = new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), Collections.emptyMap());
         return ShardingSphereDataSourceFactory.createDataSource(modeConfig, createDataSourceMap(), Collections.singleton(ruleConfig), new Properties());
     }
     
-    private Properties getReadProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "demo_write_ds");
-        result.setProperty("read-data-source-names", "demo_read_ds_0, demo_read_ds_1");
-        return result;
-    }
-    
     private Map<String, DataSource> createDataSourceMap() {
         Map<String, DataSource> result = new HashMap<>(3, 1);
         result.put("demo_write_ds", DataSourceUtil.createDataSource("demo_write_ds"));
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfigura [...]
index 4f31b2fefc6..aab297956da 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/cluster/mode/raw/jdbc/config/local/LocalShardingReadwriteSplittingConfiguration.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmC
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 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.keygen.KeyGenerateStrategyConfiguration;
@@ -86,9 +87,11 @@ public final class LocalShardingReadwriteSplittingConfiguration implements Examp
     
     private ReadwriteSplittingRuleConfiguration getReadwriteSplittingRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration1 = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_0", "Static", getReadWriteProperties("demo_write_ds_0", "demo_write_ds_0_read_0, demo_write_ds_0_read_1"), null);
+                "ds_0", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds_0",
+                Arrays.asList("demo_write_ds_0_read_0", "demo_write_ds_0_read_1")), null,null);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfiguration2 = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "ds_1", "Static", getReadWriteProperties("demo_write_ds_1", "demo_write_ds_1_read_0, demo_write_ds_1_read_1"), null);
+                "ds_1", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds_1",
+                Arrays.asList("demo_write_ds_1_read_0", "demo_write_ds_1_read_1")), null,null);
         return new ReadwriteSplittingRuleConfiguration(Arrays.asList(dataSourceConfiguration1, dataSourceConfiguration2), Collections.emptyMap());
     }
     
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/resources/META-INF/zookeeper/local/readwrite-splitting.yaml b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/resources/META-INF/zookeeper/local/readwrite-splitting.yaml
index 47f56aa1fd4..7217851945b 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/resources/META-INF/zookeeper/local/readwrite-splitting.yaml
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-raw-jdbc-example/src/main/resources/META-INF/zookeeper/local/readwrite-splitting.yaml
@@ -48,10 +48,11 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds_0, read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
 
 props:
   sql-show: true
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-boot-mybatis-example/src/main/resources/application-local-zookeeper-readwrite-splitting.properties b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-boot-mybatis-example/src/main/resources/application-local-zookeeper-readwrite-splitting.properties
index 7962ef54f91..a82cdd43c4d 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-boot-mybatis-example/src/main/resources/application-local-zookeeper-readwrite-splitting.properties
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-boot-mybatis-example/src/main/resources/application-local-zookeeper-readwrite-splitting.properties
@@ -41,8 +41,7 @@ spring.shardingsphere.datasource.read-ds-1.driver-class-name=com.mysql.jdbc.Driv
 spring.shardingsphere.datasource.read-ds-1.username=root
 spring.shardingsphere.datasource.read-ds-1.password=
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=write-ds
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=read-ds-0,read-ds-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=write-ds
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=read-ds-0,read-ds-1
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=round_robin
 spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-namespace-mybatis-example/src/main/resources/META-INF/zookeeper/local/application-readwrite-splitting.xml b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-namespace-mybatis-example/src/main/resources/META-INF/zookeeper/local/application-readwrite-splitting.xml
index baaf4800404..872561ea20b 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-namespace-mybatis-example/src/main/resources/META-INF/zookeeper/local/application-readwrite-splitting.xml
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/cluster-mode-example/cluster-mode-spring-namespace-mybatis-example/src/main/resources/META-INF/zookeeper/local/application-readwrite-splitting.xml
@@ -58,11 +58,8 @@
     <readwrite-splitting:load-balance-algorithm id="randomStrategy" type="RANDOM" />
     
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_ds" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds</prop>
-                <prop key="read-data-source-names">demo_read_ds_0, demo_read_ds_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_ds" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="staticStrategy" write-data-source-name="demo_write_ds" read-data-source-names="demo_read_ds_0, demo_read_ds_1"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
     
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/readwrite/splitting/raw/jdbc/config/ReadwriteSplittingConfiguration.java b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/readwrite/splitting/raw/jdbc/config/ReadwriteSplittingConfi [...]
index c653b3f5880..b221ccd3121 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/readwrite/splitting/raw/jdbc/config/ReadwriteSplittingConfiguration.java
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/java/org/apache/shardingsphere/example/readwrite/splitting/raw/jdbc/config/ReadwriteSplittingConfiguration.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.example.core.api.DataSourceUtil;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
@@ -30,13 +31,15 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Arrays;
 
 public final class ReadwriteSplittingConfiguration implements ExampleConfiguration {
     
     @Override
     public DataSource getDataSource() throws SQLException {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration(
-                "demo_read_query_ds", "Static", getProperties(), "demo_weight_lb");
+                "demo_read_query_ds", new StaticReadwriteSplittingStrategyConfiguration("demo_write_ds",
+                Arrays.asList("demo_read_ds_0", "demo_read_ds_1")), null,"demo_weight_lb");
         Properties algorithmProps = new Properties();
         algorithmProps.setProperty("demo_read_ds_0", "2");
         algorithmProps.setProperty("demo_read_ds_1", "1");
@@ -55,11 +58,4 @@ public final class ReadwriteSplittingConfiguration implements ExampleConfigurati
         result.put("demo_read_ds_1", DataSourceUtil.createDataSource("demo_read_ds_1"));
         return result;
     }
-    
-    private Properties getProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "demo_write_ds");
-        result.setProperty("read-data-source-names", "demo_read_ds_0, demo_read_ds_1");
-        return result;
-    }
 }
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/readwrite-splitting.yaml b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/readwrite-splitting.yaml
index 002d3c0c137..b7330134b6a 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/readwrite-splitting.yaml
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-raw-jdbc-example/src/main/resources/META-INF/readwrite-splitting.yaml
@@ -39,10 +39,11 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds_0, read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
       loadBalancerName: weight_lb
   loadBalancers:
     weight_lb:
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-readwrite-splitting.properties b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-readwrite-splitting.properties
index b187fded7cc..967243b4549 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-readwrite-splitting.properties
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-jpa-example/src/main/resources/application-readwrite-splitting.properties
@@ -35,8 +35,7 @@ spring.shardingsphere.datasource.read-ds-1.driver-class-name=com.mysql.jdbc.Driv
 spring.shardingsphere.datasource.read-ds-1.username=root
 spring.shardingsphere.datasource.read-ds-1.password=
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=write-ds
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=read-ds-0,read-ds-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=write-ds
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=read-ds-0,read-ds-1
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=round_robin
 spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-readwrite-splitting.properties b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-readwrite-splitting.properties
index b187fded7cc..967243b4549 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-readwrite-splitting.properties
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-boot-mybatis-example/src/main/resources/application-readwrite-splitting.properties
@@ -35,8 +35,7 @@ spring.shardingsphere.datasource.read-ds-1.driver-class-name=com.mysql.jdbc.Driv
 spring.shardingsphere.datasource.read-ds-1.username=root
 spring.shardingsphere.datasource.read-ds-1.password=
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=write-ds
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=read-ds-0,read-ds-1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=write-ds
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=read-ds-0,read-ds-1
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=round_robin
 spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-readwrite-splitting.xml b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-readwrite-splitting.xml
index db448ffb0ba..9c81dae0049 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-readwrite-splitting.xml
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-jpa-example/src/main/resources/META-INF/application-readwrite-splitting.xml
@@ -78,11 +78,8 @@
     <readwrite-splitting:load-balance-algorithm id="randomStrategy" type="RANDOM" />
     
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_ds" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds</prop>
-                <prop key="read-data-source-names">demo_read_ds_0, demo_read_ds_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_ds" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="staticStrategy" write-data-source-name="demo_write_ds" read-data-source-names="demo_read_ds_0, demo_read_ds_1"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
     
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
index c4c57f7223a..1b25591be9e 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/readwrite-splitting-example/readwrite-splitting-spring-namespace-mybatis-example/src/main/resources/META-INF/application-readwrite-splitting.xml
@@ -59,11 +59,8 @@
     <readwrite-splitting:load-balance-algorithm id="randomStrategy" type="RANDOM" />
     
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_ds" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">demo_write_ds</prop>
-                <prop key="read-data-source-names">demo_read_ds_0, demo_read_ds_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_ds" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="staticStrategy" write-data-source-name="demo_write_ds" read-data-source-names="demo_read_ds_0, demo_read_ds_1"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
     
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-boot-mybatis-example/src/main/resources/application-shadow-readwrite-splitting.properties b/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-boot-mybatis-example/src/main/resources/application-shadow-readwrite-splitting.properties
index 54f041df4f5..4adac72e260 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-boot-mybatis-example/src/main/resources/application-shadow-readwrite-splitting.properties
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-boot-mybatis-example/src/main/resources/application-shadow-readwrite-splitting.properties
@@ -41,9 +41,8 @@ spring.shardingsphere.datasource.shadow-read-ds.driver-class-name=com.mysql.jdbc
 spring.shardingsphere.datasource.shadow-read-ds.username=root
 spring.shardingsphere.datasource.shadow-read-ds.password=
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=shadow-data-source-write
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=shadow-data-source-read
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=shadow-data-source-write
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=shadow-data-source-read
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=round_robin
 spring.shardingsphere.rules.readwrite-splitting.load-balancers.round_robin.type=ROUND_ROBIN
 
diff --git a/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-namespace-mybatis-example/src/main/resources/META-INF/application-shadow-readwrite-splitting.xml b/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-namespace-mybatis-example/src/main/resources/META-INF/application-shadow-readwrite-splitting.xml
index a4bcce38fa2..f0b064f7433 100644
--- a/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-namespace-mybatis-example/src/main/resources/META-INF/application-shadow-readwrite-splitting.xml
+++ b/examples/shardingsphere-jdbc-example/single-feature-example/shadow-example/shadow-spring-namespace-mybatis-example/src/main/resources/META-INF/application-shadow-readwrite-splitting.xml
@@ -68,11 +68,8 @@
     <readwrite-splitting:load-balance-algorithm id="randomStrategy" type="RANDOM" />
 
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="demo_ds" type="Static" load-balance-algorithm-ref="randomStrategy">
-            <props>
-                <prop key="write-data-source-name">write_ds</prop>
-                <prop key="read-data-source-names">read_ds</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="demo_ds" load-balance-algorithm-ref="randomStrategy">
+            <readwrite-splitting:static-strategy id="staticStrategy" write-data-source-name="write-ds" read-data-source-names="read-ds"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
 
diff --git a/examples/shardingsphere-proxy-example/shardingsphere-proxy-boot-mybatis-example/src/main/resources/conf/config-readwrite-splitting.yaml b/examples/shardingsphere-proxy-example/shardingsphere-proxy-boot-mybatis-example/src/main/resources/conf/config-readwrite-splitting.yaml
index 604f0ce3f29..72dc1ff8ed3 100644
--- a/examples/shardingsphere-proxy-example/shardingsphere-proxy-boot-mybatis-example/src/main/resources/conf/config-readwrite-splitting.yaml
+++ b/examples/shardingsphere-proxy-example/shardingsphere-proxy-boot-mybatis-example/src/main/resources/conf/config-readwrite-splitting.yaml
@@ -57,7 +57,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds_0, read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
diff --git a/examples/shardingsphere-proxy-example/shardingsphere-proxy-hint-example/src/main/resources/conf/config-write-only.yaml b/examples/shardingsphere-proxy-example/shardingsphere-proxy-hint-example/src/main/resources/conf/config-write-only.yaml
index 79b385f78da..7406fa8f2d5 100644
--- a/examples/shardingsphere-proxy-example/shardingsphere-proxy-hint-example/src/main/resources/conf/config-write-only.yaml
+++ b/examples/shardingsphere-proxy-example/shardingsphere-proxy-hint-example/src/main/resources/conf/config-write-only.yaml
@@ -50,7 +50,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds_0, read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
index 2aa8dde81a6..dd80c2df78f 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/rule/ReadwriteSplittingDataSourceRuleConfiguration.java
@@ -19,9 +19,8 @@ package org.apache.shardingsphere.readwritesplitting.api.rule;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-
-import java.util.Optional;
-import java.util.Properties;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 
 /**
  * Readwrite-splitting data source rule configuration.
@@ -32,36 +31,9 @@ public final class ReadwriteSplittingDataSourceRuleConfiguration {
     
     private final String name;
     
-    private final String type;
+    private final StaticReadwriteSplittingStrategyConfiguration staticStrategy;
     
-    private final Properties props;
+    private final DynamicReadwriteSplittingStrategyConfiguration dynamicStrategy;
     
     private final String loadBalancerName;
-    
-    /**
-     * Get auto aware data source name.
-     *
-     * @return auto aware data source name
-     */
-    public Optional<String> getAutoAwareDataSourceName() {
-        return Optional.ofNullable(props.getProperty("auto-aware-data-source-name"));
-    }
-    
-    /**
-     * Get write data source name.
-     *
-     * @return write data source name
-     */
-    public Optional<String> getWriteDataSourceName() {
-        return Optional.ofNullable(props.getProperty("write-data-source-name"));
-    }
-    
-    /**
-     * Get read data source names.
-     *
-     * @return read data source names
-     */
-    public Optional<String> getReadDataSourceNames() {
-        return Optional.ofNullable(props.getProperty("read-data-source-names"));
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/strategy/DynamicReadwriteSplittingStrategyConfiguration.java
similarity index 57%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/strategy/DynamicReadwriteSplittingStrategyConfiguration.java
index 8f50aadcddb..4f6664ad8c1 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/strategy/DynamicReadwriteSplittingStrategyConfiguration.java
@@ -15,24 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.yaml.config.rule;
+package org.apache.shardingsphere.readwritesplitting.api.strategy;
 
 import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.infra.yaml.config.pojo.YamlConfiguration;
-
-import java.util.Properties;
+import lombok.RequiredArgsConstructor;
 
 /**
- * Readwrite-splitting data source rule configuration for YAML.
+ * Dynamic Readwrite-splitting strategy configuration.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
-public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
+public final class DynamicReadwriteSplittingStrategyConfiguration {
     
-    private String type;
+    private final String autoAwareDataSourceName;
     
-    private Properties props;
+    private String writeDataSourceQueryEnabled;
     
-    private String loadBalancerName;
+    public DynamicReadwriteSplittingStrategyConfiguration(final String autoAwareDataSourceName, final String writeDataSourceQueryEnabled) {
+        this.autoAwareDataSourceName = autoAwareDataSourceName;
+        this.writeDataSourceQueryEnabled = writeDataSourceQueryEnabled;
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/strategy/StaticReadwriteSplittingStrategyConfiguration.java
similarity index 64%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/strategy/StaticReadwriteSplittingStrategyConfiguration.java
index 8f50aadcddb..1905f91afee 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/api/strategy/StaticReadwriteSplittingStrategyConfiguration.java
@@ -15,24 +15,21 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.yaml.config.rule;
+package org.apache.shardingsphere.readwritesplitting.api.strategy;
 
 import lombok.Getter;
-import lombok.Setter;
-import org.apache.shardingsphere.infra.yaml.config.pojo.YamlConfiguration;
+import lombok.RequiredArgsConstructor;
 
-import java.util.Properties;
+import java.util.List;
 
 /**
- * Readwrite-splitting data source rule configuration for YAML.
+ * Static Readwrite-splitting strategy configuration.
  */
+@RequiredArgsConstructor
 @Getter
-@Setter
-public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
+public final class StaticReadwriteSplittingStrategyConfiguration {
     
-    private String type;
+    private final String writeDataSourceName;
     
-    private Properties props;
-    
-    private String loadBalancerName;
+    private final List<String> readDataSourceNames;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/factory/ReplicaLoadBalanceAlgorithmFactory.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/factory/ReplicaLoadBalanceAlgorithmFactory.java
index ffc61df1bed..e2e2011de07 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/factory/ReplicaLoadBalanceAlgorithmFactory.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-api/src/main/java/org/apache/shardingsphere/readwritesplitting/factory/ReplicaLoadBalanceAlgorithmFactory.java
@@ -27,7 +27,7 @@ import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
 import org.apache.shardingsphere.spi.type.typed.TypedSPIRegistry;
 
 /**
- * Replica load-balance algorithm factory.
+ * Read query load-balance algorithm factory.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class ReplicaLoadBalanceAlgorithmFactory {
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
index 2fea469738f..7892ef77db4 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
@@ -37,10 +37,8 @@ public abstract class AbstractReadwriteSplittingRuleConfigurationChecker<T exten
     }
     
     private void checkDataSources(final String databaseName, final Collection<ReadwriteSplittingDataSourceRuleConfiguration> dataSources) {
-        dataSources.forEach(each -> {
-            Preconditions.checkState(!each.getType().isEmpty(), "No available readwrite-splitting rule configuration in database `%s`.", databaseName);
-            Preconditions.checkState(!each.getProps().isEmpty(), "No available readwrite-splitting rule configuration in database `%s`.", databaseName);
-        });
+        dataSources.forEach(each -> Preconditions.checkState(null != each.getStaticStrategy() || null != each.getDynamicStrategy(),
+                "No available readwrite-splitting rule configuration in database `%s`.", databaseName));
     }
     
     protected abstract Collection<ReadwriteSplittingDataSourceRuleConfiguration> getDataSources(T config);
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index 40e786786d4..74aa7c6c7b7 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -51,7 +51,7 @@ public final class ReadwriteSplittingDataSourceRule {
         Preconditions.checkArgument(!Strings.isNullOrEmpty(config.getName()), "Name is required.");
         name = config.getName();
         this.loadBalancer = loadBalancer;
-        readwriteSplittingStrategy = ReadwriteSplittingStrategyFactory.newInstance(config.getType(), config.getProps());
+        readwriteSplittingStrategy = ReadwriteSplittingStrategyFactory.newInstance(config);
     }
     
     /**
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
index 26e44c296f8..61bd768067e 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
@@ -18,18 +18,18 @@
 package org.apache.shardingsphere.readwritesplitting.strategy;
 
 import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategy;
 import org.apache.shardingsphere.infra.datasource.strategy.DynamicDataSourceStrategyFactory;
+import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.strategy.type.DynamicReadwriteSplittingStrategy;
 import org.apache.shardingsphere.readwritesplitting.strategy.type.StaticReadwriteSplittingStrategy;
 
-import java.util.List;
 import java.util.Optional;
-import java.util.Properties;
 
 /**
  * Readwrite splitting strategy factory.
@@ -40,28 +40,25 @@ public final class ReadwriteSplittingStrategyFactory {
     /**
      * Create new instance of readwrite splitting strategy.
      * 
-     * @param type type of readwrite splitting strategy
-     * @param props properties of readwrite splitting strategy
+     * @param readwriteSplittingConfig readwrite-splitting rule config
      * @return created instance
      */
-    public static ReadwriteSplittingStrategy newInstance(final String type, final Properties props) {
-        return "STATIC".equalsIgnoreCase(type) ? createStaticReadwriteSplittingStrategy(props) : createDynamicReadwriteSplittingStrategy(props);
+    public static ReadwriteSplittingStrategy newInstance(final ReadwriteSplittingDataSourceRuleConfiguration readwriteSplittingConfig) {
+        return null != readwriteSplittingConfig.getStaticStrategy() ? createStaticReadwriteSplittingStrategy(readwriteSplittingConfig.getStaticStrategy())
+                : createDynamicReadwriteSplittingStrategy(readwriteSplittingConfig.getDynamicStrategy());
     }
     
-    private static StaticReadwriteSplittingStrategy createStaticReadwriteSplittingStrategy(final Properties props) {
-        String writeDataSourceName = props.getProperty("write-data-source-name");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(writeDataSourceName), "Write data source name is required.");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(props.getProperty("read-data-source-names")), "Read data source names are required.");
-        List<String> readDataSourceNames = Splitter.on(",").trimResults().splitToList(props.getProperty("read-data-source-names"));
-        return new StaticReadwriteSplittingStrategy(writeDataSourceName, readDataSourceNames);
+    private static StaticReadwriteSplittingStrategy createStaticReadwriteSplittingStrategy(final StaticReadwriteSplittingStrategyConfiguration staticConfig) {
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(staticConfig.getWriteDataSourceName()), "Write data source name is required.");
+        Preconditions.checkArgument(!staticConfig.getReadDataSourceNames().isEmpty(), "Read data source names are required.");
+        return new StaticReadwriteSplittingStrategy(staticConfig.getWriteDataSourceName(), staticConfig.getReadDataSourceNames());
     }
     
-    private static DynamicReadwriteSplittingStrategy createDynamicReadwriteSplittingStrategy(final Properties props) {
-        String autoAwareDataSourceName = props.getProperty("auto-aware-data-source-name");
-        Preconditions.checkArgument(!Strings.isNullOrEmpty(autoAwareDataSourceName), "Auto aware data source name is required.");
+    private static DynamicReadwriteSplittingStrategy createDynamicReadwriteSplittingStrategy(final DynamicReadwriteSplittingStrategyConfiguration dynamicConfig) {
+        Preconditions.checkArgument(!Strings.isNullOrEmpty(dynamicConfig.getAutoAwareDataSourceName()), "Auto aware data source name is required.");
         Optional<DynamicDataSourceStrategy> dynamicDataSourceStrategy = DynamicDataSourceStrategyFactory.findInstance();
         Preconditions.checkArgument(dynamicDataSourceStrategy.isPresent(), "Dynamic data source strategy is required.");
-        boolean allowWriteDataSourceQuery = Boolean.parseBoolean(props.getOrDefault("write-data-source-query-enabled", String.valueOf(Boolean.TRUE)).toString());
-        return new DynamicReadwriteSplittingStrategy(autoAwareDataSourceName, allowWriteDataSourceQuery, dynamicDataSourceStrategy.get());
+        boolean allowWriteDataSourceQuery = Strings.isNullOrEmpty(dynamicConfig.getWriteDataSourceQueryEnabled()) ? Boolean.TRUE : Boolean.parseBoolean(dynamicConfig.getWriteDataSourceQueryEnabled());
+        return new DynamicReadwriteSplittingStrategy(dynamicConfig.getAutoAwareDataSourceName(), allowWriteDataSourceQuery, dynamicDataSourceStrategy.get());
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
index 8f50aadcddb..15c3371a9f0 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
@@ -20,8 +20,8 @@ package org.apache.shardingsphere.readwritesplitting.yaml.config.rule;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlConfiguration;
-
-import java.util.Properties;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.strategy.YamlDynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.strategy.YamlStaticReadwriteSplittingStrategyConfiguration;
 
 /**
  * Readwrite-splitting data source rule configuration for YAML.
@@ -30,9 +30,9 @@ import java.util.Properties;
 @Setter
 public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
     
-    private String type;
+    private YamlStaticReadwriteSplittingStrategyConfiguration staticStrategy;
     
-    private Properties props;
+    private YamlDynamicReadwriteSplittingStrategyConfiguration dynamicStrategy;
     
     private String loadBalancerName;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlDynamicReadwriteSplittingStrategyConfiguration.java
similarity index 77%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlDynamicReadwriteSplittingStrategyConfiguration.java
index 8f50aadcddb..95ff886881b 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlDynamicReadwriteSplittingStrategyConfiguration.java
@@ -15,24 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.yaml.config.rule;
+package org.apache.shardingsphere.readwritesplitting.yaml.config.strategy;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlConfiguration;
 
-import java.util.Properties;
-
 /**
- * Readwrite-splitting data source rule configuration for YAML.
+ * Dynamic Readwrite-splitting strategy configuration for YAML.
  */
 @Getter
 @Setter
-public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
-    
-    private String type;
+public final class YamlDynamicReadwriteSplittingStrategyConfiguration implements YamlConfiguration {
     
-    private Properties props;
+    private String autoAwareDataSourceName;
     
-    private String loadBalancerName;
+    private String writeDataSourceQueryEnabled;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlReadwriteSplittingStrategyConfiguration.java
similarity index 76%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlReadwriteSplittingStrategyConfiguration.java
index 8f50aadcddb..0b9bf269f0d 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlReadwriteSplittingStrategyConfiguration.java
@@ -15,24 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.yaml.config.rule;
+package org.apache.shardingsphere.readwritesplitting.yaml.config.strategy;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlConfiguration;
 
-import java.util.Properties;
-
 /**
- * Readwrite-splitting data source rule configuration for YAML.
+ * Readwrite-splitting strategy configuration for YAML.
  */
 @Getter
 @Setter
-public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
-    
-    private String type;
+public final class YamlReadwriteSplittingStrategyConfiguration implements YamlConfiguration {
     
-    private Properties props;
+    private YamlStaticReadwriteSplittingStrategyConfiguration staticStrategy;
     
-    private String loadBalancerName;
+    private YamlDynamicReadwriteSplittingStrategyConfiguration dynamicStrategy;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlStaticReadwriteSplittingStrategyConfiguration.java
similarity index 80%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlStaticReadwriteSplittingStrategyConfiguration.java
index 8f50aadcddb..283cbccb413 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/rule/YamlReadwriteSplittingDataSourceRuleConfiguration.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/strategy/YamlStaticReadwriteSplittingStrategyConfiguration.java
@@ -15,24 +15,22 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.yaml.config.rule;
+package org.apache.shardingsphere.readwritesplitting.yaml.config.strategy;
 
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlConfiguration;
 
-import java.util.Properties;
+import java.util.List;
 
 /**
- * Readwrite-splitting data source rule configuration for YAML.
+ * Static Readwrite-splitting strategy configuration for YAML.
  */
 @Getter
 @Setter
-public final class YamlReadwriteSplittingDataSourceRuleConfiguration implements YamlConfiguration {
+public final class YamlStaticReadwriteSplittingStrategyConfiguration implements YamlConfiguration {
     
-    private String type;
+    private String writeDataSourceName;
     
-    private Properties props;
-    
-    private String loadBalancerName;
+    private List<String> readDataSourceNames;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
index 54d8de70842..5685fb46ec4 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper.java
@@ -24,6 +24,8 @@ import org.apache.shardingsphere.readwritesplitting.yaml.config.rule.YamlReadwri
 import org.apache.shardingsphere.infra.yaml.config.pojo.algorithm.YamlShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapper;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.swapper.strategy.DynamicReadwriteSplittingStrategyConfigurationYamlSwapper;
+import org.apache.shardingsphere.readwritesplitting.yaml.swapper.strategy.StaticReadwriteSplittingStrategyConfigurationYamlSwapper;
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
@@ -38,6 +40,10 @@ public final class ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
         implements
             YamlRuleConfigurationSwapper<YamlReadwriteSplittingRuleConfiguration, AlgorithmProvidedReadwriteSplittingRuleConfiguration> {
     
+    private final StaticReadwriteSplittingStrategyConfigurationYamlSwapper staticReadwriteSplittingYamlSwapper = new StaticReadwriteSplittingStrategyConfigurationYamlSwapper();
+    
+    private final DynamicReadwriteSplittingStrategyConfigurationYamlSwapper dynamicReadwriteSplittingYamlSwapper = new DynamicReadwriteSplittingStrategyConfigurationYamlSwapper();
+    
     @Override
     public YamlReadwriteSplittingRuleConfiguration swapToYamlConfiguration(final AlgorithmProvidedReadwriteSplittingRuleConfiguration data) {
         YamlReadwriteSplittingRuleConfiguration result = new YamlReadwriteSplittingRuleConfiguration();
@@ -51,8 +57,12 @@ public final class ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
     
     private YamlReadwriteSplittingDataSourceRuleConfiguration swapToYamlConfiguration(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig) {
         YamlReadwriteSplittingDataSourceRuleConfiguration result = new YamlReadwriteSplittingDataSourceRuleConfiguration();
-        result.setType(dataSourceRuleConfig.getType());
-        result.setProps(dataSourceRuleConfig.getProps());
+        if (null != dataSourceRuleConfig.getStaticStrategy()) {
+            result.setStaticStrategy(staticReadwriteSplittingYamlSwapper.swapToYamlConfiguration(dataSourceRuleConfig.getStaticStrategy()));
+        }
+        if (null != dataSourceRuleConfig.getDynamicStrategy()) {
+            result.setDynamicStrategy(dynamicReadwriteSplittingYamlSwapper.swapToYamlConfiguration(dataSourceRuleConfig.getDynamicStrategy()));
+        }
         result.setLoadBalancerName(dataSourceRuleConfig.getLoadBalancerName());
         return result;
     }
@@ -69,7 +79,8 @@ public final class ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
     }
     
     private ReadwriteSplittingDataSourceRuleConfiguration swapToObject(final String name, final YamlReadwriteSplittingDataSourceRuleConfiguration yamlDataSourceRuleConfig) {
-        return new ReadwriteSplittingDataSourceRuleConfiguration(name, yamlDataSourceRuleConfig.getType(), yamlDataSourceRuleConfig.getProps(), yamlDataSourceRuleConfig.getLoadBalancerName());
+        return new ReadwriteSplittingDataSourceRuleConfiguration(name, staticReadwriteSplittingYamlSwapper.swapToObject(yamlDataSourceRuleConfig.getStaticStrategy()),
+                dynamicReadwriteSplittingYamlSwapper.swapToObject(yamlDataSourceRuleConfig.getDynamicStrategy()), yamlDataSourceRuleConfig.getLoadBalancerName());
     }
     
     @Override
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
index b077bced3fe..e3b754030ba 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationYamlSwapper.java
@@ -25,6 +25,8 @@ import org.apache.shardingsphere.infra.yaml.config.swapper.algorithm.ShardingSph
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.yaml.config.rule.YamlReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.swapper.strategy.DynamicReadwriteSplittingStrategyConfigurationYamlSwapper;
+import org.apache.shardingsphere.readwritesplitting.yaml.swapper.strategy.StaticReadwriteSplittingStrategyConfigurationYamlSwapper;
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
@@ -40,6 +42,10 @@ public final class ReadwriteSplittingRuleConfigurationYamlSwapper
         implements
             YamlRuleConfigurationSwapper<YamlReadwriteSplittingRuleConfiguration, ReadwriteSplittingRuleConfiguration> {
     
+    private final StaticReadwriteSplittingStrategyConfigurationYamlSwapper staticReadwriteSplittingYamlSwapper = new StaticReadwriteSplittingStrategyConfigurationYamlSwapper();
+    
+    private final DynamicReadwriteSplittingStrategyConfigurationYamlSwapper dynamicReadwriteSplittingYamlSwapper = new DynamicReadwriteSplittingStrategyConfigurationYamlSwapper();
+    
     private final ShardingSphereAlgorithmConfigurationYamlSwapper algorithmSwapper = new ShardingSphereAlgorithmConfigurationYamlSwapper();
     
     @Override
@@ -55,8 +61,12 @@ public final class ReadwriteSplittingRuleConfigurationYamlSwapper
     
     private YamlReadwriteSplittingDataSourceRuleConfiguration swapToYamlConfiguration(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig) {
         YamlReadwriteSplittingDataSourceRuleConfiguration result = new YamlReadwriteSplittingDataSourceRuleConfiguration();
-        result.setType(dataSourceRuleConfig.getType());
-        result.setProps(dataSourceRuleConfig.getProps());
+        if (null != dataSourceRuleConfig.getStaticStrategy()) {
+            result.setStaticStrategy(staticReadwriteSplittingYamlSwapper.swapToYamlConfiguration(dataSourceRuleConfig.getStaticStrategy()));
+        }
+        if (null != dataSourceRuleConfig.getDynamicStrategy()) {
+            result.setDynamicStrategy(dynamicReadwriteSplittingYamlSwapper.swapToYamlConfiguration(dataSourceRuleConfig.getDynamicStrategy()));
+        }
         result.setLoadBalancerName(dataSourceRuleConfig.getLoadBalancerName());
         return result;
     }
@@ -75,7 +85,8 @@ public final class ReadwriteSplittingRuleConfigurationYamlSwapper
     }
     
     private ReadwriteSplittingDataSourceRuleConfiguration swapToObject(final String name, final YamlReadwriteSplittingDataSourceRuleConfiguration yamlDataSourceRuleConfig) {
-        return new ReadwriteSplittingDataSourceRuleConfiguration(name, yamlDataSourceRuleConfig.getType(), yamlDataSourceRuleConfig.getProps(), yamlDataSourceRuleConfig.getLoadBalancerName());
+        return new ReadwriteSplittingDataSourceRuleConfiguration(name, staticReadwriteSplittingYamlSwapper.swapToObject(yamlDataSourceRuleConfig.getStaticStrategy()),
+                dynamicReadwriteSplittingYamlSwapper.swapToObject(yamlDataSourceRuleConfig.getDynamicStrategy()), yamlDataSourceRuleConfig.getLoadBalancerName());
     }
     
     @Override
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/strategy/DynamicReadwriteSplittingStrategyConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/strategy/DynamicReadwriteSplittingStrategyConfigurationYamlSwapper.java
new file mode 100644
index 00000000000..f852d23026a
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/strategy/DynamicReadwriteSplittingStrategyConfigurationYamlSwapper.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.readwritesplitting.yaml.swapper.strategy;
+
+import org.apache.shardingsphere.infra.yaml.config.swapper.YamlConfigurationSwapper;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.strategy.YamlDynamicReadwriteSplittingStrategyConfiguration;
+
+/**
+ * Dynamic Readwrite-splitting strategy configuration YAML swapper.
+ */
+public final class DynamicReadwriteSplittingStrategyConfigurationYamlSwapper
+        implements
+            YamlConfigurationSwapper<YamlDynamicReadwriteSplittingStrategyConfiguration, DynamicReadwriteSplittingStrategyConfiguration> {
+    
+    @Override
+    public YamlDynamicReadwriteSplittingStrategyConfiguration swapToYamlConfiguration(final DynamicReadwriteSplittingStrategyConfiguration config) {
+        YamlDynamicReadwriteSplittingStrategyConfiguration result = new YamlDynamicReadwriteSplittingStrategyConfiguration();
+        result.setAutoAwareDataSourceName(config.getAutoAwareDataSourceName());
+        result.setWriteDataSourceQueryEnabled(config.getWriteDataSourceQueryEnabled());
+        return result;
+    }
+    
+    @Override
+    public DynamicReadwriteSplittingStrategyConfiguration swapToObject(final YamlDynamicReadwriteSplittingStrategyConfiguration config) {
+        DynamicReadwriteSplittingStrategyConfiguration result = null;
+        if (null != config) {
+            result = new DynamicReadwriteSplittingStrategyConfiguration(config.getAutoAwareDataSourceName(), config.getWriteDataSourceQueryEnabled());
+        }
+        return result;
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/strategy/StaticReadwriteSplittingStrategyConfigurationYamlSwapper.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/strategy/StaticReadwriteSplittingStrategyConfigurationYamlSwapper.java
new file mode 100644
index 00000000000..820bd75d1c7
--- /dev/null
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/strategy/StaticReadwriteSplittingStrategyConfigurationYamlSwapper.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.readwritesplitting.yaml.swapper.strategy;
+
+import org.apache.shardingsphere.infra.yaml.config.swapper.YamlConfigurationSwapper;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.strategy.YamlStaticReadwriteSplittingStrategyConfiguration;
+
+/**
+ * Static Readwrite-splitting strategy configuration YAML swapper.
+ */
+public final class StaticReadwriteSplittingStrategyConfigurationYamlSwapper
+        implements
+            YamlConfigurationSwapper<YamlStaticReadwriteSplittingStrategyConfiguration, StaticReadwriteSplittingStrategyConfiguration> {
+    
+    @Override
+    public YamlStaticReadwriteSplittingStrategyConfiguration swapToYamlConfiguration(final StaticReadwriteSplittingStrategyConfiguration config) {
+        YamlStaticReadwriteSplittingStrategyConfiguration result = new YamlStaticReadwriteSplittingStrategyConfiguration();
+        result.setWriteDataSourceName(config.getWriteDataSourceName());
+        result.setReadDataSourceNames(config.getReadDataSourceNames());
+        return result;
+    }
+    
+    @Override
+    public StaticReadwriteSplittingStrategyConfiguration swapToObject(final YamlStaticReadwriteSplittingStrategyConfiguration yamlConfig) {
+        StaticReadwriteSplittingStrategyConfiguration result = null;
+        if (null != yamlConfig) {
+            result = new StaticReadwriteSplittingStrategyConfiguration(yamlConfig.getWriteDataSourceName(), yamlConfig.getReadDataSourceNames());
+        }
+        return result;
+    }
+}
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
index 82fc8fb70e4..54a81ad7686 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
@@ -21,11 +21,11 @@ import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
 import org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
 import org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
 import org.junit.Test;
 
 import java.util.Collections;
 import java.util.Optional;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -48,18 +48,11 @@ public final class AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
     private AlgorithmProvidedReadwriteSplittingRuleConfiguration createValidConfiguration() {
         AlgorithmProvidedReadwriteSplittingRuleConfiguration result = mock(AlgorithmProvidedReadwriteSplittingRuleConfiguration.class);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
-        when(dataSourceConfig.getType()).thenReturn("Dynamic");
-        when(dataSourceConfig.getProps()).thenReturn(getProperties());
+        when(dataSourceConfig.getDynamicStrategy()).thenReturn(new DynamicReadwriteSplittingStrategyConfiguration("ds0"));
         when(result.getDataSources()).thenReturn(Collections.singleton(dataSourceConfig));
         return result;
     }
     
-    private Properties getProperties() {
-        Properties result = new Properties();
-        result.setProperty("auto-aware-data-source-name", "ds0");
-        return result;
-    }
-    
     @SuppressWarnings({"rawtypes", "unchecked"})
     @Test(expected = IllegalStateException.class)
     public void assertInValidCheck() {
@@ -73,8 +66,6 @@ public final class AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
     private AlgorithmProvidedReadwriteSplittingRuleConfiguration createInvalidConfiguration() {
         AlgorithmProvidedReadwriteSplittingRuleConfiguration result = mock(AlgorithmProvidedReadwriteSplittingRuleConfiguration.class);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
-        when(dataSourceConfig.getType()).thenReturn("Dynamic");
-        when(dataSourceConfig.getProps()).thenReturn(new Properties());
         when(result.getDataSources()).thenReturn(Collections.singleton(dataSourceConfig));
         return result;
     }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
index 88f2a78da2c..280b30e8a28 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
@@ -21,11 +21,11 @@ import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
 import org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
 import org.junit.Test;
 
 import java.util.Collections;
 import java.util.Optional;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -48,18 +48,11 @@ public final class ReadwriteSplittingRuleConfigurationCheckerTest {
     private ReadwriteSplittingRuleConfiguration createValidConfiguration() {
         ReadwriteSplittingRuleConfiguration result = mock(ReadwriteSplittingRuleConfiguration.class);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
-        when(dataSourceConfig.getType()).thenReturn("Dynamic");
-        when(dataSourceConfig.getProps()).thenReturn(getProperties());
+        when(dataSourceConfig.getDynamicStrategy()).thenReturn(new DynamicReadwriteSplittingStrategyConfiguration("ds0"));
         when(result.getDataSources()).thenReturn(Collections.singletonList(dataSourceConfig));
         return result;
     }
     
-    private Properties getProperties() {
-        Properties result = new Properties();
-        result.setProperty("auto-aware-data-source-name", "ds0");
-        return result;
-    }
-    
     @SuppressWarnings({"rawtypes", "unchecked"})
     @Test(expected = IllegalStateException.class)
     public void assertInvalidCheck() {
@@ -73,8 +66,6 @@ public final class ReadwriteSplittingRuleConfigurationCheckerTest {
     private ReadwriteSplittingRuleConfiguration createInvalidConfiguration() {
         ReadwriteSplittingRuleConfiguration result = mock(ReadwriteSplittingRuleConfiguration.class);
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
-        when(dataSourceConfig.getType()).thenReturn("Dynamic");
-        when(dataSourceConfig.getProps()).thenReturn(new Properties());
         when(result.getDataSources()).thenReturn(Collections.singleton(dataSourceConfig));
         return result;
     }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
index 97801199fbb..7f1bd2e2a62 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/ReadwriteSplittingSQLRouterTest.java
@@ -33,6 +33,8 @@ import org.apache.shardingsphere.infra.route.context.RouteMapper;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.LockSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -46,6 +48,7 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Optional;
@@ -82,26 +85,17 @@ public final class ReadwriteSplittingSQLRouterTest {
     @Before
     public void setUp() {
         rule = new ReadwriteSplittingRule(new ReadwriteSplittingRuleConfiguration(Collections.singleton(
-                new ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, "Static", createProperties(), "")), Collections.emptyMap()));
+                new ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME,
+                        new StaticReadwriteSplittingStrategyConfiguration(WRITE_DATASOURCE, Arrays.asList(READ_DATASOURCE)), null, "")),
+                Collections.emptyMap()));
         sqlRouter = (ReadwriteSplittingSQLRouter) SQLRouterFactory.getInstances(Collections.singleton(rule)).get(rule);
         dynamicRule = new ReadwriteSplittingRule(new ReadwriteSplittingRuleConfiguration(Collections.singleton(
-                new ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, "Dynamic", createDynamicProperties(), "")), Collections.emptyMap()));
+                new ReadwriteSplittingDataSourceRuleConfiguration(DATASOURCE_NAME, null,
+                        new DynamicReadwriteSplittingStrategyConfiguration("readwrite_ds"), "")),
+                Collections.emptyMap()));
         dynamicSqlRouter = (ReadwriteSplittingSQLRouter) SQLRouterFactory.getInstances(Collections.singleton(dynamicRule)).get(dynamicRule);
     }
     
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", WRITE_DATASOURCE);
-        result.setProperty("read-data-source-names", READ_DATASOURCE);
-        return result;
-    }
-    
-    private Properties createDynamicProperties() {
-        Properties result = new Properties();
-        result.setProperty("auto-aware-data-source-name", "readwrite_ds");
-        return result;
-    }
-    
     @Test
     public void assertCreateRouteContextToPrimaryWithoutRouteUnits() {
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", Collections.emptyList());
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadWriteSplittingDataSourceRuleConfigurationTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadWriteSplittingDataSourceRuleConfigurationTest.java
index 8365645949d..83b8bca2421 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadWriteSplittingDataSourceRuleConfigurationTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadWriteSplittingDataSourceRuleConfigurationTest.java
@@ -19,9 +19,12 @@ package org.apache.shardingsphere.readwritesplitting.rule;
 
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
 
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.junit.Before;
 import org.junit.Test;
-import java.util.Properties;
+
+import java.util.Arrays;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
@@ -35,38 +38,24 @@ public final class ReadWriteSplittingDataSourceRuleConfigurationTest {
     
     @Before
     public void setup() {
-        readwriteSplittingDataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("ds", "Static", getStaticReadwriteSplittingProperties(), "");
-        readwriteSplittingDataSourceRuleConfigDynamic = new ReadwriteSplittingDataSourceRuleConfiguration("ds", "Dynamic", getDynamicReadwriteSplittingProperties(), "");
-    }
-    
-    @Test
-    public void assertDynamicReadWriteSplittingConfig() {
-        assertNotNull(readwriteSplittingDataSourceRuleConfigDynamic.getProps());
-        assertThat(readwriteSplittingDataSourceRuleConfigDynamic.getProps().getProperty("auto-aware-data-source-name"), is("readwrite_ds"));
-        assertThat(readwriteSplittingDataSourceRuleConfigDynamic.getProps().getProperty("write-data-source-query-enabled"), is("false"));
+        readwriteSplittingDataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("ds",
+                new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds_0", "read_ds_1")), null, "");
+        readwriteSplittingDataSourceRuleConfigDynamic = new ReadwriteSplittingDataSourceRuleConfiguration("ds", null,
+                new DynamicReadwriteSplittingStrategyConfiguration("readwrite_ds"), "");
     }
     
     @Test
-    public void assertGetWriteDataSourceName() {
-        assertThat(readwriteSplittingDataSourceRuleConfig.getProps().getProperty("write-data-source-name"), is("write_ds"));
+    public void assertStaticReadWriteSplittingConfig() {
+        assertNotNull(readwriteSplittingDataSourceRuleConfig.getStaticStrategy());
+        StaticReadwriteSplittingStrategyConfiguration actual = readwriteSplittingDataSourceRuleConfig.getStaticStrategy();
+        assertThat(actual.getWriteDataSourceName(), is("write_ds"));
+        assertThat(actual.getReadDataSourceNames(), is(Arrays.asList("read_ds_0", "read_ds_1")));
     }
     
     @Test
-    public void assertGetReadDataSourceNames() {
-        assertThat(readwriteSplittingDataSourceRuleConfig.getProps().getProperty("read-data-source-names"), is("read_ds_0,read_ds_1"));
-    }
-    
-    private Properties getStaticReadwriteSplittingProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "write_ds");
-        result.setProperty("read-data-source-names", "read_ds_0,read_ds_1");
-        return result;
-    }
-    
-    private Properties getDynamicReadwriteSplittingProperties() {
-        Properties result = new Properties();
-        result.setProperty("auto-aware-data-source-name", "readwrite_ds");
-        result.setProperty("write-data-source-query-enabled", "false");
-        return result;
+    public void assertDynamicReadWriteSplittingConfig() {
+        assertNotNull(readwriteSplittingDataSourceRuleConfigDynamic.getDynamicStrategy());
+        DynamicReadwriteSplittingStrategyConfiguration actual = readwriteSplittingDataSourceRuleConfigDynamic.getDynamicStrategy();
+        assertThat(actual.getAutoAwareDataSourceName(), is("readwrite_ds"));
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
index 484771b1e85..ff7f2582c0d 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
@@ -20,12 +20,12 @@ package org.apache.shardingsphere.readwritesplitting.rule;
 import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RandomReplicaLoadBalanceAlgorithm;
 import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RoundRobinReplicaLoadBalanceAlgorithm;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -37,23 +37,30 @@ public final class ReadwriteSplittingDataSourceRuleTest {
     @Before
     public void setUp() {
         readwriteSplittingDataSourceRule = new ReadwriteSplittingDataSourceRule(
-                new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", "Static", getProperties("write_ds", "read_ds_0,read_ds_1"), ""), new RandomReplicaLoadBalanceAlgorithm());
+                new ReadwriteSplittingDataSourceRuleConfiguration("test_pr",
+                        new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds_0", "read_ds_1")), null, null),
+                new RandomReplicaLoadBalanceAlgorithm());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewReadwriteSplittingDataSourceRuleWithoutName() {
-        new ReadwriteSplittingDataSourceRule(new ReadwriteSplittingDataSourceRuleConfiguration("", "Static", getProperties("write_ds", "read_ds"), null), new RoundRobinReplicaLoadBalanceAlgorithm());
+        new ReadwriteSplittingDataSourceRule(new ReadwriteSplittingDataSourceRuleConfiguration("",
+                new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds")),
+                null, null), new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewReadwriteSplittingDataSourceRuleWithoutWriteDataSourceName() {
-        new ReadwriteSplittingDataSourceRule(new ReadwriteSplittingDataSourceRuleConfiguration("ds", "Static", getProperties("", "read_ds"), null),
-                new RoundRobinReplicaLoadBalanceAlgorithm());
+        new ReadwriteSplittingDataSourceRule(new ReadwriteSplittingDataSourceRuleConfiguration("ds",
+                new StaticReadwriteSplittingStrategyConfiguration("", Arrays.asList("read_ds")),
+                null, null), new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test(expected = IllegalArgumentException.class)
     public void assertNewReadwriteSplittingDataSourceRuleWithEmptyReadDataSourceName() {
-        new ReadwriteSplittingDataSourceRule(new ReadwriteSplittingDataSourceRuleConfiguration("ds", "Static", getProperties("write_ds", ""), ""), new RoundRobinReplicaLoadBalanceAlgorithm());
+        new ReadwriteSplittingDataSourceRule(new ReadwriteSplittingDataSourceRuleConfiguration("ds",
+                new StaticReadwriteSplittingStrategyConfiguration("write_ds", Collections.emptyList()),
+                null, null), new RoundRobinReplicaLoadBalanceAlgorithm());
     }
     
     @Test
@@ -91,11 +98,4 @@ public final class ReadwriteSplittingDataSourceRuleTest {
         readwriteSplittingDataSourceRule.updateDisabledDataSourceNames("read_ds_0", true);
         assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(), is(Collections.singletonList("read_ds_1")));
     }
-    
-    private Properties getProperties(final String writeDataSource, final String readDataSources) {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", writeDataSource);
-        result.setProperty("read-data-source-names", readDataSources);
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 8f75eb859af..ce4f729fc4d 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
 import org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -59,18 +60,11 @@ public final class ReadwriteSplittingRuleTest {
     
     private ReadwriteSplittingRule createReadwriteSplittingRule() {
         ReadwriteSplittingDataSourceRuleConfiguration config =
-                new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", "Static", createProperties(), "random");
+                new ReadwriteSplittingDataSourceRuleConfiguration("test_pr", new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds_0", "read_ds_1")), null, "random");
         return new ReadwriteSplittingRule(new ReadwriteSplittingRuleConfiguration(
                 Collections.singleton(config), Collections.singletonMap("random", new ShardingSphereAlgorithmConfiguration("RANDOM", new Properties()))));
     }
     
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "write_ds");
-        result.setProperty("read-data-source-names", "read_ds_0,read_ds_1");
-        return result;
-    }
-    
     private void assertDataSourceRule(final ReadwriteSplittingDataSourceRule actual) {
         assertThat(actual.getName(), is("test_pr"));
         assertThat(actual.getReadwriteSplittingStrategy().getWriteDataSource(), is("write_ds"));
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
index 270e5be6f48..8b1d81b52aa 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/AlgorithmProvidedReadwriteSplittingRuleBuilderTest.java
@@ -21,11 +21,12 @@ import org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRuleBuilder;
 import org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRuleBuilderFactory;
 import org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -36,15 +37,10 @@ public final class AlgorithmProvidedReadwriteSplittingRuleBuilderTest {
     @Test
     public void assertBuild() {
         AlgorithmProvidedReadwriteSplittingRuleConfiguration ruleConfig = new AlgorithmProvidedReadwriteSplittingRuleConfiguration(
-                Collections.singletonList(new ReadwriteSplittingDataSourceRuleConfiguration("name", "Static", createProperties(), "loadBalancerName")), Collections.emptyMap());
+                Collections.singletonList(new ReadwriteSplittingDataSourceRuleConfiguration("name",
+                        new StaticReadwriteSplittingStrategyConfiguration("writeDataSourceName", Arrays.asList("readDataSourceName")), null, "loadBalancerName")),
+                Collections.emptyMap());
         DatabaseRuleBuilder builder = DatabaseRuleBuilderFactory.getInstanceMap(Collections.singletonList(ruleConfig)).get(ruleConfig);
         assertThat(builder.build(ruleConfig, "", Collections.emptyMap(), Collections.emptyList()), instanceOf(ReadwriteSplittingRule.class));
     }
-    
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "writeDataSourceName");
-        result.setProperty("read-data-source-names", "readDataSourceName");
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
index c34b605ad0b..7fb1105344c 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/builder/ReadwriteSplittingRuleBuilderTest.java
@@ -21,11 +21,12 @@ import org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRuleBuilder;
 import org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRuleBuilderFactory;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
@@ -36,15 +37,11 @@ public final class ReadwriteSplittingRuleBuilderTest {
     @Test
     public void assertBuild() {
         ReadwriteSplittingRuleConfiguration ruleConfig = new ReadwriteSplittingRuleConfiguration(
-                Collections.singletonList(new ReadwriteSplittingDataSourceRuleConfiguration("name", "Static", createProperties(), "loadBalancerName")), Collections.emptyMap());
+                Collections.singletonList(new ReadwriteSplittingDataSourceRuleConfiguration("name",
+                        new StaticReadwriteSplittingStrategyConfiguration("writeDataSourceName", Arrays.asList("readDataSourceName")),
+                        null, "loadBalancerName")),
+                Collections.emptyMap());
         DatabaseRuleBuilder builder = DatabaseRuleBuilderFactory.getInstanceMap(Collections.singletonList(ruleConfig)).get(ruleConfig);
         assertThat(builder.build(ruleConfig, "", Collections.emptyMap(), Collections.emptyList()), instanceOf(ReadwriteSplittingRule.class));
     }
-    
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "writeDataSourceName");
-        result.setProperty("read-data-source-names", "readDataSourceName");
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
index 317663ea278..bc12db9260d 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
@@ -20,16 +20,18 @@ package org.apache.shardingsphere.readwritesplitting.swapper;
 import org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RandomReplicaLoadBalanceAlgorithm;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.yaml.config.YamlReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.yaml.swapper.ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapper;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
 
 public final class ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapperTest {
     
@@ -39,9 +41,9 @@ public final class ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
     public void assertSwapToYamlConfiguration() {
         YamlReadwriteSplittingRuleConfiguration actual = createYamlReadwriteSplittingRuleConfiguration();
         assertThat(actual.getDataSources().keySet(), is(Collections.singleton("name")));
-        Properties props = actual.getDataSources().get("name").getProps();
-        assertThat(props.getProperty("write-data-source-name"), is("writeDataSourceName"));
-        assertThat(props.getProperty("read-data-source-names"), is("readDataSourceName"));
+        assertNotNull(actual.getDataSources().get("name").getStaticStrategy());
+        assertThat(actual.getDataSources().get("name").getStaticStrategy().getWriteDataSourceName(), is("writeDataSourceName"));
+        assertThat(actual.getDataSources().get("name").getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("readDataSourceName")));
         assertThat(actual.getDataSources().get("name").getLoadBalancerName(), is("loadBalancerName"));
         assertThat(actual.getLoadBalancers().keySet(), is(Collections.singleton("name")));
         assertThat(actual.getLoadBalancers().get("name").getType(), is("RANDOM"));
@@ -53,22 +55,17 @@ public final class ReadwriteSplittingRuleAlgorithmProviderConfigurationYamlSwapp
         assertTrue(actual.getDataSources().iterator().hasNext());
         ReadwriteSplittingDataSourceRuleConfiguration ruleConfig = actual.getDataSources().iterator().next();
         assertThat(ruleConfig.getName(), is("name"));
-        assertThat(ruleConfig.getProps().getProperty("write-data-source-name"), is("writeDataSourceName"));
-        assertThat(ruleConfig.getProps().getProperty("read-data-source-names"), is("readDataSourceName"));
+        assertNotNull(ruleConfig.getStaticStrategy());
+        assertThat(ruleConfig.getStaticStrategy().getWriteDataSourceName(), is("writeDataSourceName"));
+        assertThat(ruleConfig.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("readDataSourceName")));
         assertThat(ruleConfig.getLoadBalancerName(), is("loadBalancerName"));
         assertThat(actual.getLoadBalanceAlgorithms(), is(Collections.emptyMap()));
     }
     
     private YamlReadwriteSplittingRuleConfiguration createYamlReadwriteSplittingRuleConfiguration() {
-        ReadwriteSplittingDataSourceRuleConfiguration ruleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("name", "Static", createProperties(), "loadBalancerName");
+        ReadwriteSplittingDataSourceRuleConfiguration ruleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("name",
+                new StaticReadwriteSplittingStrategyConfiguration("writeDataSourceName", Arrays.asList("readDataSourceName")), null, "loadBalancerName");
         return swapper.swapToYamlConfiguration(
                 new AlgorithmProvidedReadwriteSplittingRuleConfiguration(Collections.singletonList(ruleConfig), Collections.singletonMap("name", new RandomReplicaLoadBalanceAlgorithm())));
     }
-    
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "writeDataSourceName");
-        result.setProperty("read-data-source-names", "readDataSourceName");
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
index 525b92a7f33..30a7ead8ae4 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/ReadwriteSplittingRuleConfigurationYamlSwapperTest.java
@@ -21,17 +21,21 @@ import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmC
 import org.apache.shardingsphere.infra.yaml.config.swapper.YamlRuleConfigurationSwapperFactory;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.yaml.config.YamlReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.yaml.config.rule.YamlReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.strategy.YamlStaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.yaml.swapper.ReadwriteSplittingRuleConfigurationYamlSwapper;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Optional;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
@@ -40,31 +44,28 @@ public final class ReadwriteSplittingRuleConfigurationYamlSwapperTest {
     @Test
     public void assertSwapToYamlWithLoadBalanceAlgorithm() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig =
-                new ReadwriteSplittingDataSourceRuleConfiguration("ds", "Static", getProperties(), "roundRobin");
+                new ReadwriteSplittingDataSourceRuleConfiguration("ds",
+                        new StaticReadwriteSplittingStrategyConfiguration("write", Arrays.asList("read")), null, "roundRobin");
         YamlReadwriteSplittingRuleConfiguration actual = getReadwriteSplittingRuleConfigurationYamlSwapper().swapToYamlConfiguration(new ReadwriteSplittingRuleConfiguration(
                 Collections.singleton(dataSourceConfig), Collections.singletonMap("roundRobin", new ShardingSphereAlgorithmConfiguration("ROUND_ROBIN", new Properties()))));
-        assertThat(actual.getDataSources().get("ds").getProps().getProperty("write-data-source-name"), is("write"));
-        assertThat(actual.getDataSources().get("ds").getProps().getProperty("read-data-source-names"), is("read"));
+        assertNotNull(actual.getDataSources().get("ds").getStaticStrategy());
+        assertThat((actual.getDataSources().get("ds").getStaticStrategy()).getWriteDataSourceName(), is("write"));
+        assertThat((actual.getDataSources().get("ds").getStaticStrategy()).getReadDataSourceNames(), is(Arrays.asList("read")));
         assertThat(actual.getDataSources().get("ds").getLoadBalancerName(), is("roundRobin"));
     }
     
     @Test
     public void assertSwapToYamlWithoutLoadBalanceAlgorithm() {
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration("ds", "Static", getProperties(), null);
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig = new ReadwriteSplittingDataSourceRuleConfiguration("ds",
+                new StaticReadwriteSplittingStrategyConfiguration("write", Arrays.asList("read")), null, null);
         YamlReadwriteSplittingRuleConfiguration actual = getReadwriteSplittingRuleConfigurationYamlSwapper().swapToYamlConfiguration(
                 new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceConfig), Collections.emptyMap()));
-        assertThat(actual.getDataSources().get("ds").getProps().getProperty("write-data-source-name"), is("write"));
-        assertThat(actual.getDataSources().get("ds").getProps().getProperty("read-data-source-names"), is("read"));
+        assertNotNull(actual.getDataSources().get("ds").getStaticStrategy());
+        assertThat(actual.getDataSources().get("ds").getStaticStrategy().getWriteDataSourceName(), is("write"));
+        assertThat(actual.getDataSources().get("ds").getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("read")));
         assertNull(actual.getDataSources().get("ds").getLoadBalancerName());
     }
     
-    private Properties getProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "write");
-        result.setProperty("read-data-source-names", "read");
-        return result;
-    }
-    
     @Test
     public void assertSwapToObjectWithLoadBalanceAlgorithmType() {
         YamlReadwriteSplittingRuleConfiguration yamlConfig = createYamlReadwriteSplittingRuleConfiguration();
@@ -85,16 +86,19 @@ public final class ReadwriteSplittingRuleConfigurationYamlSwapperTest {
     private YamlReadwriteSplittingRuleConfiguration createYamlReadwriteSplittingRuleConfiguration() {
         YamlReadwriteSplittingRuleConfiguration result = new YamlReadwriteSplittingRuleConfiguration();
         result.getDataSources().put("read_query_ds", new YamlReadwriteSplittingDataSourceRuleConfiguration());
-        result.getDataSources().get("read_query_ds").setType("Static");
-        result.getDataSources().get("read_query_ds").setProps(getProperties());
+        YamlStaticReadwriteSplittingStrategyConfiguration staticConfig = new YamlStaticReadwriteSplittingStrategyConfiguration();
+        staticConfig.setWriteDataSourceName("write");
+        staticConfig.setReadDataSourceNames(Arrays.asList("read"));
+        result.getDataSources().get("read_query_ds").setStaticStrategy(staticConfig);
         return result;
     }
     
     private void assertReadwriteSplittingRuleConfiguration(final ReadwriteSplittingRuleConfiguration actual) {
         ReadwriteSplittingDataSourceRuleConfiguration group = actual.getDataSources().iterator().next();
         assertThat(group.getName(), is("read_query_ds"));
-        assertThat(group.getProps().getProperty("write-data-source-name"), is("write"));
-        assertThat(group.getProps().getProperty("read-data-source-names"), is("read"));
+        assertNotNull(group.getStaticStrategy());
+        assertThat(group.getStaticStrategy().getWriteDataSourceName(), is("write"));
+        assertThat(group.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("read")));
     }
     
     private ReadwriteSplittingRuleConfigurationYamlSwapper getReadwriteSplittingRuleConfigurationYamlSwapper() {
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/YamlRootRuleConfigurationsForYamlReadwriteSplittingRuleConfigurationTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/YamlRootRuleConfigurationsForYamlReadwriteSplittingRuleConfiguration [...]
index e79b90b0113..f799e9e577d 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/YamlRootRuleConfigurationsForYamlReadwriteSplittingRuleConfigurationTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/swapper/YamlRootRuleConfigurationsForYamlReadwriteSplittingRuleConfigurationTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.readwritesplitting.swapper;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import org.apache.shardingsphere.readwritesplitting.yaml.config.YamlReadwriteSplittingRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.yaml.config.strategy.YamlStaticReadwriteSplittingStrategyConfiguration;
 import org.junit.Test;
 
 import java.io.BufferedReader;
@@ -68,14 +69,16 @@ public final class YamlRootRuleConfigurationsForYamlReadwriteSplittingRuleConfig
     }
     
     private void assertReadwriteSplittingRuleForDs0(final YamlReadwriteSplittingRuleConfiguration actual) {
-        assertThat(actual.getDataSources().get("ds_0").getType(), is("Static"));
-        assertThat(actual.getDataSources().get("ds_0").getProps().getProperty("write-data-source-name"), is("write_ds_0"));
+        assertNotNull(actual.getDataSources().get("ds_0").getStaticStrategy());
+        YamlStaticReadwriteSplittingStrategyConfiguration staticConfig = actual.getDataSources().get("ds_0").getStaticStrategy();
+        assertThat(staticConfig.getWriteDataSourceName(), is("write_ds_0"));
         assertThat(actual.getDataSources().get("ds_0").getLoadBalancerName(), is("roundRobin"));
     }
     
     private void assertReadwriteSplittingRuleForDs1(final YamlReadwriteSplittingRuleConfiguration actual) {
-        assertThat(actual.getDataSources().get("ds_1").getType(), is("Static"));
-        assertThat(actual.getDataSources().get("ds_1").getProps().getProperty("write-data-source-name"), is("write_ds_1"));
+        assertNotNull(actual.getDataSources().get("ds_1").getStaticStrategy());
+        YamlStaticReadwriteSplittingStrategyConfiguration staticConfig = actual.getDataSources().get("ds_1").getStaticStrategy();
+        assertThat(staticConfig.getWriteDataSourceName(), is("write_ds_1"));
         assertThat(actual.getDataSources().get("ds_1").getLoadBalancerName(), is("random"));
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/yaml/readwrite-splitting-rule.yaml b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/yaml/readwrite-splitting-rule.yaml
index 3c4875e9a2b..b706f35d8b7 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/yaml/readwrite-splitting-rule.yaml
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/resources/yaml/readwrite-splitting-rule.yaml
@@ -33,16 +33,18 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: write_ds_0_read_0,write_ds_0_read_1
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - write_ds_0_read_0
+          - write_ds_0_read_1
       loadBalancerName: roundRobin
     ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: write_ds_1_read_0,write_ds_1_read_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - write_ds_1_read_0
+          - write_ds_1_read_1
       loadBalancerName: random
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/r [...]
index 39c47cd0ff8..0f68614f8ca 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverter.java
@@ -22,13 +22,15 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.segment.ReadwriteSplittingRuleSegment;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
-import java.util.Properties;
 
 /**
  * Readwrite splitting rule statement converter.
@@ -49,17 +51,20 @@ public final class ReadwriteSplittingRuleStatementConverter {
             if (null != each.getLoadBalancer()) {
                 String loadBalancerName = getLoadBalancerName(each.getName(), each.getLoadBalancer());
                 loadBalancers.put(loadBalancerName, createLoadBalancer(each));
-                dataSources.add(createDataSourceRuleConfiguration(each.getName(), createProperties(each), loadBalancerName, each.isAutoAware()));
+                dataSources.add(createDataSourceRuleConfiguration(each, loadBalancerName, each.isAutoAware()));
             } else {
-                dataSources.add(createDataSourceRuleConfiguration(each.getName(), createProperties(each), null, each.isAutoAware()));
+                dataSources.add(createDataSourceRuleConfiguration(each, null, each.isAutoAware()));
             }
         }
         return new ReadwriteSplittingRuleConfiguration(dataSources, loadBalancers);
     }
     
-    private static ReadwriteSplittingDataSourceRuleConfiguration createDataSourceRuleConfiguration(final String name, final Properties prop, final String loadBalancerName, final boolean isAutoAware) {
-        return isAutoAware ? new ReadwriteSplittingDataSourceRuleConfiguration(name, "Dynamic", prop, loadBalancerName)
-                : new ReadwriteSplittingDataSourceRuleConfiguration(name, "Static", prop, loadBalancerName);
+    private static ReadwriteSplittingDataSourceRuleConfiguration createDataSourceRuleConfiguration(final ReadwriteSplittingRuleSegment segment,
+                                                                                                   final String loadBalancerName, final boolean isAutoAware) {
+        return isAutoAware ? new ReadwriteSplittingDataSourceRuleConfiguration(segment.getName(), null,
+                new DynamicReadwriteSplittingStrategyConfiguration(segment.getAutoAwareResource()), loadBalancerName)
+                : new ReadwriteSplittingDataSourceRuleConfiguration(segment.getName(),
+                        new StaticReadwriteSplittingStrategyConfiguration(segment.getWriteDataSource(), new ArrayList<>(segment.getReadDataSources())), null, loadBalancerName);
     }
     
     private static ShardingSphereAlgorithmConfiguration createLoadBalancer(final ReadwriteSplittingRuleSegment ruleSegment) {
@@ -69,15 +74,4 @@ public final class ReadwriteSplittingRuleStatementConverter {
     private static String getLoadBalancerName(final String ruleName, final String type) {
         return String.format("%s_%s", ruleName, type);
     }
-    
-    private static Properties createProperties(final ReadwriteSplittingRuleSegment segment) {
-        Properties result = new Properties();
-        if (segment.isAutoAware()) {
-            result.setProperty("auto-aware-data-source-name", segment.getAutoAwareResource());
-        } else {
-            result.setProperty("write-data-source-name", segment.getWriteDataSource());
-            result.setProperty("read-data-source-names", String.join(",", segment.getReadDataSources()));
-        }
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSet.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwrite [...]
index 6a53c0860c0..8cd6611ab27 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSet.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSet.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.readwritesplitting.distsql.handler.query;
 
+import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
@@ -78,10 +79,10 @@ public final class ReadwriteSplittingRuleQueryResultSet implements DistSQLResult
     
     private Collection<Object> buildDataItem(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig, final Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers) {
         String name = dataSourceRuleConfig.getName();
-        Map<String, String> exportDataSources = DYNAMIC.equalsIgnoreCase(dataSourceRuleConfig.getType()) ? exportableAutoAwareDataSource.get(name) : exportableDataSourceMap.get(name);
+        Map<String, String> exportDataSources = null != dataSourceRuleConfig.getDynamicStrategy() ? exportableAutoAwareDataSource.get(name) : exportableDataSourceMap.get(name);
         Optional<ShardingSphereAlgorithmConfiguration> loadBalancer = Optional.ofNullable(loadBalancers.get(dataSourceRuleConfig.getLoadBalancerName()));
         return Arrays.asList(name,
-                dataSourceRuleConfig.getAutoAwareDataSourceName().orElse(""),
+                getAutoAwareDataSourceName(dataSourceRuleConfig),
                 getWriteDataSourceName(dataSourceRuleConfig, exportDataSources),
                 getReadDataSourceNames(dataSourceRuleConfig, exportDataSources),
                 loadBalancer.map(ShardingSphereAlgorithmConfiguration::getType).orElse(""),
@@ -93,18 +94,25 @@ public final class ReadwriteSplittingRuleQueryResultSet implements DistSQLResult
         return null != loadBalancers ? loadBalancers : Collections.emptyMap();
     }
     
+    private String getAutoAwareDataSourceName(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig) {
+        if (null == dataSourceRuleConfig.getDynamicStrategy()) {
+            return "";
+        }
+        return dataSourceRuleConfig.getDynamicStrategy().getAutoAwareDataSourceName();
+    }
+    
     private String getWriteDataSourceName(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig, final Map<String, String> exportDataSources) {
         if (null != exportDataSources) {
             return exportDataSources.get(ExportableItemConstants.PRIMARY_DATA_SOURCE_NAME);
         }
-        return dataSourceRuleConfig.getWriteDataSourceName().orElse("");
+        return dataSourceRuleConfig.getStaticStrategy().getWriteDataSourceName();
     }
     
     private String getReadDataSourceNames(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig, final Map<String, String> exportDataSources) {
         if (null != exportDataSources) {
             return exportDataSources.get(ExportableItemConstants.REPLICA_DATA_SOURCE_NAMES);
         }
-        return dataSourceRuleConfig.getReadDataSourceNames().orElse("");
+        return Joiner.on(",").join(dataSourceRuleConfig.getStaticStrategy().getReadDataSourceNames());
     }
     
     @Override
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverterTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphe [...]
index a2e9245ab2d..7e1de25b4f4 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverterTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/converter/ReadwriteSplittingRuleStatementConverterTest.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.readwritesplitting.distsql.handler.converter;
 
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
 import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
@@ -31,7 +29,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.Properties;
 import java.util.stream.Stream;
 
@@ -40,6 +37,7 @@ import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
 
 public final class ReadwriteSplittingRuleStatementConverterTest {
     
@@ -65,8 +63,9 @@ public final class ReadwriteSplittingRuleStatementConverterTest {
         assertThat(actualRuleConfig.getName(), is(expectedSingleReadwriteSplittingRuleSegment.getName()));
         String expectedLoadBalancerName = String.format("%s_%s", expectedSingleReadwriteSplittingRuleSegment.getName(), expectedSingleReadwriteSplittingRuleSegment.getLoadBalancer());
         assertThat(actualRuleConfig.getLoadBalancerName(), is(expectedLoadBalancerName));
-        assertThat(actualRuleConfig.getWriteDataSourceName(), is(Optional.ofNullable(expectedSingleReadwriteSplittingRuleSegment.getWriteDataSource())));
-        assertThat(convertToList(actualRuleConfig.getReadDataSourceNames().orElse(null)), is(expectedSingleReadwriteSplittingRuleSegment.getReadDataSources()));
+        assertNotNull(actualRuleConfig.getStaticStrategy());
+        assertThat(actualRuleConfig.getStaticStrategy().getWriteDataSourceName(), is(expectedSingleReadwriteSplittingRuleSegment.getWriteDataSource()));
+        assertThat(actualRuleConfig.getStaticStrategy().getReadDataSourceNames(), is(expectedSingleReadwriteSplittingRuleSegment.getReadDataSources()));
         String actualLoadBalancerName = actualSingleRuleSegmentConvertResultLoadBalancers.keySet().iterator().next();
         assertThat(actualLoadBalancerName, is(expectedLoadBalancerName));
         ShardingSphereAlgorithmConfiguration actualSphereAlgorithmConfig = actualSingleRuleSegmentConvertResultLoadBalancers.get(actualLoadBalancerName);
@@ -93,11 +92,10 @@ public final class ReadwriteSplittingRuleStatementConverterTest {
                     assertThat(actualRuleConfig.getName(), is(expectedReadwriteSplittingRuleSegment.getName()));
                     String expectedLoadBalancerName = String.format("%s_%s", expectedReadwriteSplittingRuleSegment.getName(), expectedReadwriteSplittingRuleSegment.getLoadBalancer());
                     assertThat(actualRuleConfig.getLoadBalancerName(), is(expectedLoadBalancerName));
-                    assertThat(actualRuleConfig.getWriteDataSourceName().orElse(null), is(expectedReadwriteSplittingRuleSegment.getWriteDataSource()));
-                    assertThat(convertToList(actualRuleConfig.getReadDataSourceNames().orElse(null)),
-                            equalTo(expectedReadwriteSplittingRuleSegment.getReadDataSources() == null
-                                    ? Collections.emptyList()
-                                    : expectedReadwriteSplittingRuleSegment.getReadDataSources()));
+                    assertThat(getWriteDataSourceName(actualRuleConfig), is(expectedReadwriteSplittingRuleSegment.getWriteDataSource()));
+                    assertThat(getReadDataSourceNames(actualRuleConfig), equalTo(expectedReadwriteSplittingRuleSegment.getReadDataSources() == null
+                            ? Collections.emptyList()
+                            : expectedReadwriteSplittingRuleSegment.getReadDataSources()));
                     assertTrue(actualMultipleRuleSegmentConvertResultLoadBalancers.containsKey(expectedLoadBalancerName));
                     ShardingSphereAlgorithmConfiguration actualSphereAlgorithmConfig = actualMultipleRuleSegmentConvertResultLoadBalancers.get(actualRuleConfig.getLoadBalancerName());
                     assertThat(actualSphereAlgorithmConfig.getType(), containsString(expectedReadwriteSplittingRuleSegment.getLoadBalancer()));
@@ -105,6 +103,14 @@ public final class ReadwriteSplittingRuleStatementConverterTest {
                 });
     }
     
+    private String getWriteDataSourceName(final ReadwriteSplittingDataSourceRuleConfiguration ruleConfiguration) {
+        return null != ruleConfiguration.getDynamicStrategy() ? null : ruleConfiguration.getStaticStrategy().getWriteDataSourceName();
+    }
+    
+    private Collection<String> getReadDataSourceNames(final ReadwriteSplittingDataSourceRuleConfiguration ruleConfiguration) {
+        return null != ruleConfiguration.getDynamicStrategy() ? Collections.emptyList() : ruleConfiguration.getStaticStrategy().getReadDataSourceNames();
+    }
+    
     private ReadwriteSplittingRuleSegment createReadwriteSplittingRuleSegment(final String name, final String writeDataSource, final List<String> readDataSources, final String loadBalancerTypeName,
                                                                               final Properties props) {
         return new ReadwriteSplittingRuleSegment(name, writeDataSource, readDataSources, loadBalancerTypeName, props);
@@ -113,8 +119,4 @@ public final class ReadwriteSplittingRuleStatementConverterTest {
     private ReadwriteSplittingRuleSegment createReadwriteSplittingRuleSegment(final String name, final String autoAwareResource, final String loadBalancer, final Properties props) {
         return new ReadwriteSplittingRuleSegment(name, autoAwareResource, loadBalancer, props);
     }
-    
-    private Collection<String> convertToList(final String readDataSourceNames) {
-        return Strings.isNullOrEmpty(readDataSourceNames) ? Collections.emptyList() : Splitter.on(",").trimResults().splitToList(readDataSourceNames);
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSetTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readw [...]
index 75bcc41743d..eb7072d04d3 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSetTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ReadwriteSplittingRuleQueryResultSetTest.java
@@ -24,10 +24,13 @@ import org.apache.shardingsphere.infra.distsql.constant.ExportableItemConstants;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.ShowReadwriteSplittingRulesStatement;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.junit.Test;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -72,7 +75,8 @@ public final class ReadwriteSplittingRuleQueryResultSetTest {
     
     private RuleConfiguration createRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
-                new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Static", getProperties("ds_primary", "ds_slave_0,ds_slave_1"), "test");
+                new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
+                        new StaticReadwriteSplittingStrategyConfiguration("ds_primary", Arrays.asList("ds_slave_0", "ds_slave_1")), null, "test");
         Properties props = new Properties();
         props.setProperty("read_weight", "2:1");
         return new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceRuleConfig), Collections.singletonMap("test", new ShardingSphereAlgorithmConfiguration("random", props)));
@@ -96,17 +100,11 @@ public final class ReadwriteSplittingRuleQueryResultSetTest {
     
     private RuleConfiguration createRuleConfigurationWithoutLoadBalancer() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
-                new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Static", getProperties("write_ds", "read_ds_0,read_ds_1"), null);
+                new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
+                        new StaticReadwriteSplittingStrategyConfiguration("write_ds", Arrays.asList("read_ds_0", "read_ds_1")), null, null);
         return new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceRuleConfig), null);
     }
     
-    private Properties getProperties(final String writeDataSource, final String readDataSources) {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", writeDataSource);
-        result.setProperty("read-data-source-names", readDataSources);
-        return result;
-    }
-    
     @Test
     public void assertGetRowDataWithAutoAwareDataSource() {
         ShardingSphereDatabase metaData = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
@@ -155,9 +153,8 @@ public final class ReadwriteSplittingRuleQueryResultSetTest {
     }
     
     private RuleConfiguration createRuleConfigurationWithAutoAwareDataSource() {
-        Properties props = new Properties();
-        props.setProperty("auto-aware-data-source-name", "rd_rs");
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Dynamic", props, "");
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", null,
+                new DynamicReadwriteSplittingStrategyConfiguration("rd_rs"), "");
         return new ReadwriteSplittingRuleConfiguration(Collections.singleton(dataSourceRuleConfig), null);
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphe [...]
index 0b5cefe8fe4..b142a4cc61a 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/AlterReadwriteSplittingRuleStatementUpdaterTest.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphere
 import org.apache.shardingsphere.infra.rule.identifier.type.exportable.ExportableRule;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.segment.ReadwriteSplittingRuleSegment;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.AlterReadwriteSplittingRuleStatement;
 import org.junit.Before;
@@ -99,14 +100,8 @@ public final class AlterReadwriteSplittingRuleStatementUpdaterTest {
     
     private ReadwriteSplittingRuleConfiguration createCurrentRuleConfiguration() {
         ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig =
-                new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Static", createProperties(), "TEST");
+                new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
+                        new StaticReadwriteSplittingStrategyConfiguration("ds_write", Arrays.asList("read_ds_0", "read_ds_1")), null, "TEST");
         return new ReadwriteSplittingRuleConfiguration(new LinkedList<>(Collections.singleton(dataSourceRuleConfig)), Collections.emptyMap());
     }
-    
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "ds_write");
-        result.setProperty("read-data-source-names", "read_ds_0,read_ds_1");
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsph [...]
index 45a467af86c..8d27da87114 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/CreateReadwriteSplittingRuleStatementUpdaterTest.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphere
 import org.apache.shardingsphere.infra.rule.identifier.type.exportable.ExportableRule;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.segment.ReadwriteSplittingRuleSegment;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.CreateReadwriteSplittingRuleStatement;
 import org.apache.shardingsphere.readwritesplitting.factory.ReplicaLoadBalanceAlgorithmFactory;
@@ -137,14 +138,8 @@ public final class CreateReadwriteSplittingRuleStatementUpdaterTest {
     }
     
     private ReadwriteSplittingRuleConfiguration createCurrentRuleConfiguration() {
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Static", createProperties(), "TEST");
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
+                new StaticReadwriteSplittingStrategyConfiguration("ds_write", Arrays.asList("read_ds_0", "read_ds_1")), null, "TEST");
         return new ReadwriteSplittingRuleConfiguration(new LinkedList<>(Collections.singleton(dataSourceRuleConfig)), Collections.emptyMap());
     }
-    
-    private Properties createProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "ds_write");
-        result.setProperty("read-data-source-names", "read_ds_0,read_ds_1");
-        return result;
-    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingspher [...]
index 98f1f7388a0..ac2aa71e998 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleStatementUpdaterTest.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRul
 import org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.DropReadwriteSplittingRuleStatement;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -109,20 +110,24 @@ public final class DropReadwriteSplittingRuleStatementUpdaterTest {
     }
     
     private ReadwriteSplittingRuleConfiguration createCurrentRuleConfiguration() {
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Static", new Properties(), "TEST");
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
+                new StaticReadwriteSplittingStrategyConfiguration("", Collections.emptyList()), null, "TEST");
         Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = Collections.singletonMap("readwrite_ds", new ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
         return new ReadwriteSplittingRuleConfiguration(new LinkedList<>(Collections.singleton(dataSourceRuleConfig)), loadBalancers);
     }
     
     private ReadwriteSplittingRuleConfiguration createCurrentRuleConfigurationWithoutLoadBalancerName() {
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds", "Static", new Properties(), null);
+        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_ds",
+                new StaticReadwriteSplittingStrategyConfiguration("", Collections.emptyList()), null, null);
         Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = Collections.singletonMap("readwrite_ds", new ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
         return new ReadwriteSplittingRuleConfiguration(new LinkedList<>(Collections.singleton(dataSourceRuleConfig)), loadBalancers);
     }
     
     private ReadwriteSplittingRuleConfiguration createMultipleCurrentRuleConfigurations() {
-        ReadwriteSplittingDataSourceRuleConfiguration fooDataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("foo_ds", "Static", new Properties(), "TEST");
-        ReadwriteSplittingDataSourceRuleConfiguration barDataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("bar_ds", "Static", new Properties(), "TEST");
+        ReadwriteSplittingDataSourceRuleConfiguration fooDataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("foo_ds",
+                new StaticReadwriteSplittingStrategyConfiguration("", Collections.emptyList()), null, "TEST");
+        ReadwriteSplittingDataSourceRuleConfiguration barDataSourceRuleConfig = new ReadwriteSplittingDataSourceRuleConfiguration("bar_ds",
+                new StaticReadwriteSplittingStrategyConfiguration("", Collections.emptyList()), null, "TEST");
         Map<String, ShardingSphereAlgorithmConfiguration> loadBalancers = Collections.singletonMap("foo_ds", new ShardingSphereAlgorithmConfiguration("TEST", new Properties()));
         return new ReadwriteSplittingRuleConfiguration(new LinkedList<>(Arrays.asList(fooDataSourceRuleConfig, barDataSourceRuleConfig)), loadBalancers);
     }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/boot/ReadwriteSplittingSpringBootStarterTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwrites [...]
index 32e1b3c6293..937865cc6d4 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/boot/ReadwriteSplittingSpringBootStarterTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/boot/ReadwriteSplittingSpringBootStarterTest.java
@@ -29,9 +29,12 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import javax.annotation.Resource;
 
+import java.util.Arrays;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
 
 @RunWith(SpringJUnit4ClassRunner.class)
 @SpringBootTest(classes = ReadwriteSplittingSpringBootStarterTest.class)
@@ -54,13 +57,13 @@ public class ReadwriteSplittingSpringBootStarterTest {
     public void assertReadwriteSplittingRuleConfiguration() {
         assertThat(config.getDataSources().size(), is(1));
         assertTrue(config.getDataSources().stream().findFirst().isPresent());
-        ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig = config.getDataSources().stream().findFirst().get();
-        assertThat(dataSourceRuleConfig.getName(), is("readwrite_ds"));
-        assertThat(dataSourceRuleConfig.getType(), is("Static"));
-        assertThat(dataSourceRuleConfig.getProps().getProperty("write-data-source-name"), is("write_ds"));
-        assertThat(dataSourceRuleConfig.getProps().getProperty("read-data-source-names"), is("read_ds_0,read_ds_1"));
-        assertThat(dataSourceRuleConfig.getLoadBalancerName(), is("random"));
-        assertTrue(config.getDataSources().contains(dataSourceRuleConfig));
+        ReadwriteSplittingDataSourceRuleConfiguration actual = config.getDataSources().stream().findFirst().get();
+        assertThat(actual.getName(), is("readwrite_ds"));
+        assertNotNull(actual.getStaticStrategy());
+        assertThat(actual.getStaticStrategy().getWriteDataSourceName(), is("write_ds"));
+        assertThat(actual.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("read_ds_0", "read_ds_1")));
+        assertThat(actual.getLoadBalancerName(), is("random"));
+        assertTrue(config.getDataSources().contains(actual));
         assertThat(config.getLoadBalanceAlgorithms().size(), is(1));
         assertTrue(config.getLoadBalanceAlgorithms().containsKey("random"));
     }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/resources/application-readwrite-splitting.properties b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/resources/application-readwrite-splitting.properties
index f989763bc0c..a78e73de68d 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/resources/application-readwrite-splitting.properties
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-boot-starter/src/test/resources/application-readwrite-splitting.properties
@@ -15,11 +15,10 @@
 # limitations under the License.
 #
 
-spring.shardingsphere.rules.readwrite-splitting.load-balancers.random.type=RANDOM
-
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=write_ds
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=read_ds_0,read_ds_1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=write_ds
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=read_ds_0, read_ds_1
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=random
 
+spring.shardingsphere.rules.readwrite-splitting.load-balancers.random.type=RANDOM
+
 spring.main.banner-mode=off
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/parser/ReadwriteSplittingRuleBeanDefinitionParser.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/r [...]
index 1a210dfd60e..854651cd4c4 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/parser/ReadwriteSplittingRuleBeanDefinitionParser.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/parser/ReadwriteSplittingRuleBeanDefinitionParser.java
@@ -17,10 +17,15 @@
 
 package org.apache.shardingsphere.readwritesplitting.spring.namespace.parser;
 
+import com.google.common.base.Splitter;
 import org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.spring.namespace.factorybean.ReplicaLoadBalanceAlgorithmFactoryBean;
 import org.apache.shardingsphere.readwritesplitting.spring.namespace.tag.ReadwriteSplittingRuleBeanDefinitionTag;
+import org.apache.shardingsphere.readwritesplitting.spring.namespace.tag.strategy.DynamicReadwriteSplittingBeanDefinitionTag;
+import org.apache.shardingsphere.readwritesplitting.spring.namespace.tag.strategy.StaticReadwriteSplittingBeanDefinitionTag;
 import org.apache.shardingsphere.spring.namespace.registry.ShardingSphereAlgorithmBeanRegistry;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
@@ -32,7 +37,6 @@ import org.springframework.util.xml.DomUtils;
 import org.w3c.dom.Element;
 
 import java.util.List;
-import java.util.Properties;
 
 /**
  * Readwrite-splitting rule bean definition parser.
@@ -42,31 +46,52 @@ public final class ReadwriteSplittingRuleBeanDefinitionParser extends AbstractBe
     @Override
     protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
         BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(AlgorithmProvidedReadwriteSplittingRuleConfiguration.class);
-        factory.addConstructorArgValue(parseReadwriteSplittingDataSourceRuleConfigurations(element, parserContext));
+        factory.addConstructorArgValue(parseReadwriteSplittingDataSourceRuleConfigurations(element));
         factory.addConstructorArgValue(ShardingSphereAlgorithmBeanRegistry.getAlgorithmBeanReferences(parserContext, ReplicaLoadBalanceAlgorithmFactoryBean.class));
         return factory.getBeanDefinition();
     }
     
-    private List<BeanDefinition> parseReadwriteSplittingDataSourceRuleConfigurations(final Element element, final ParserContext parserContext) {
+    private List<BeanDefinition> parseReadwriteSplittingDataSourceRuleConfigurations(final Element element) {
         List<Element> dataSourceElements = DomUtils.getChildElementsByTagName(element, ReadwriteSplittingRuleBeanDefinitionTag.DATA_SOURCE_TAG);
         List<BeanDefinition> result = new ManagedList<>(dataSourceElements.size());
         for (Element each : dataSourceElements) {
-            result.add(parseReadwriteSplittingDataSourceRuleConfiguration(each, parserContext));
+            result.add(parseReadwriteSplittingDataSourceRuleConfiguration(each));
         }
         return result;
     }
     
-    private BeanDefinition parseReadwriteSplittingDataSourceRuleConfiguration(final Element element, final ParserContext parserContext) {
+    private BeanDefinition parseReadwriteSplittingDataSourceRuleConfiguration(final Element element) {
         BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(ReadwriteSplittingDataSourceRuleConfiguration.class);
         factory.addConstructorArgValue(element.getAttribute(ReadwriteSplittingRuleBeanDefinitionTag.READWRITE_SPLITTING_DATA_SOURCE_ID_ATTRIBUTE));
-        factory.addConstructorArgValue(element.getAttribute(ReadwriteSplittingRuleBeanDefinitionTag.READWRITE_SPLITTING_TYPE));
-        factory.addConstructorArgValue(parseProperties(element, parserContext));
+        parseReadwriteSplittingStrategyConfiguration(element, factory);
         factory.addConstructorArgValue(element.getAttribute(ReadwriteSplittingRuleBeanDefinitionTag.LOAD_BALANCE_ALGORITHM_REF_ATTRIBUTE));
         return factory.getBeanDefinition();
     }
     
-    private Properties parseProperties(final Element element, final ParserContext parserContext) {
-        Element propsElement = DomUtils.getChildElementByTagName(element, ReadwriteSplittingRuleBeanDefinitionTag.READWRITE_SPLITTING_PROPS);
-        return null == propsElement ? new Properties() : parserContext.getDelegate().parsePropsElement(propsElement);
+    private void parseReadwriteSplittingStrategyConfiguration(final Element element, final BeanDefinitionBuilder factory) {
+        Element strategyElement = DomUtils.getChildElementByTagName(element, StaticReadwriteSplittingBeanDefinitionTag.STATIC_STRATEGY_ROOT_TAG);
+        if (null != strategyElement) {
+            factory.addConstructorArgValue(getStaticReadwriteSplittingStrategyConfigBeanDefinition(DomUtils.getChildElementByTagName(element,
+                    StaticReadwriteSplittingBeanDefinitionTag.STATIC_STRATEGY_ROOT_TAG)));
+            factory.addConstructorArgValue(null);
+        } else {
+            factory.addConstructorArgValue(null);
+            factory.addConstructorArgValue(getDynamicReadwriteSplittingStrategyConfigBeanDefinition(DomUtils.getChildElementByTagName(element,
+                    DynamicReadwriteSplittingBeanDefinitionTag.DYNAMIC_STRATEGY_ROOT_TAG)));
+        }
+    }
+    
+    private AbstractBeanDefinition getStaticReadwriteSplittingStrategyConfigBeanDefinition(final Element element) {
+        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(StaticReadwriteSplittingStrategyConfiguration.class);
+        factory.addConstructorArgValue(element.getAttribute(StaticReadwriteSplittingBeanDefinitionTag.WRITE_DATA_SOURCE_NAME));
+        factory.addConstructorArgValue(Splitter.on(',').trimResults().splitToList(element.getAttribute(StaticReadwriteSplittingBeanDefinitionTag.READ_DATA_SOURCE_NAMES)));
+        return factory.getBeanDefinition();
+    }
+    
+    private AbstractBeanDefinition getDynamicReadwriteSplittingStrategyConfigBeanDefinition(final Element element) {
+        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(DynamicReadwriteSplittingStrategyConfiguration.class);
+        factory.addConstructorArgValue(element.getAttribute(DynamicReadwriteSplittingBeanDefinitionTag.AUTO_AWARE_DATA_SOURCE_NAME));
+        factory.addConstructorArgValue(element.getAttribute(DynamicReadwriteSplittingBeanDefinitionTag.WRITE_DATA_SOURCE_QUERY_ENABLED));
+        return factory.getBeanDefinition();
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwri [...]
index d76a3e4630d..f9df058d1af 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
@@ -32,9 +32,5 @@ public final class ReadwriteSplittingRuleBeanDefinitionTag {
     
     public static final String READWRITE_SPLITTING_DATA_SOURCE_ID_ATTRIBUTE = "id";
     
-    public static final String READWRITE_SPLITTING_TYPE = "type";
-    
-    public static final String READWRITE_SPLITTING_PROPS = "props";
-    
     public static final String LOAD_BALANCE_ALGORITHM_REF_ATTRIBUTE = "load-balance-algorithm-ref";
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwri [...]
similarity index 63%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/strategy/DynamicReadwriteSplittingBeanDefinitionTag.java
index d76a3e4630d..86bf4d38ee2 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/strategy/DynamicReadwriteSplittingBeanDefinitionTag.java
@@ -15,26 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.spring.namespace.tag;
+package org.apache.shardingsphere.readwritesplitting.spring.namespace.tag.strategy;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Readwrite-splitting rule bean definition tag.
+ * Readwrite-splitting Dynamic bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ReadwriteSplittingRuleBeanDefinitionTag {
+public final class DynamicReadwriteSplittingBeanDefinitionTag {
     
-    public static final String ROOT_TAG = "rule";
+    public static final String DYNAMIC_STRATEGY_ROOT_TAG = "dynamic-strategy";
     
-    public static final String DATA_SOURCE_TAG = "data-source-rule";
+    public static final String AUTO_AWARE_DATA_SOURCE_NAME = "auto-aware-data-source-name";
     
-    public static final String READWRITE_SPLITTING_DATA_SOURCE_ID_ATTRIBUTE = "id";
-    
-    public static final String READWRITE_SPLITTING_TYPE = "type";
-    
-    public static final String READWRITE_SPLITTING_PROPS = "props";
-    
-    public static final String LOAD_BALANCE_ALGORITHM_REF_ATTRIBUTE = "load-balance-algorithm-ref";
+    public static final String WRITE_DATA_SOURCE_QUERY_ENABLED = "write-data-source-query-enabled";
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwri [...]
similarity index 63%
copy from shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
copy to shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/strategy/StaticReadwriteSplittingBeanDefinitionTag.java
index d76a3e4630d..4f3d24c7b7f 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/ReadwriteSplittingRuleBeanDefinitionTag.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/tag/strategy/StaticReadwriteSplittingBeanDefinitionTag.java
@@ -15,26 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.readwritesplitting.spring.namespace.tag;
+package org.apache.shardingsphere.readwritesplitting.spring.namespace.tag.strategy;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Readwrite-splitting rule bean definition tag.
+ * Readwrite-splitting static bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ReadwriteSplittingRuleBeanDefinitionTag {
+public final class StaticReadwriteSplittingBeanDefinitionTag {
     
-    public static final String ROOT_TAG = "rule";
+    public static final String STATIC_STRATEGY_ROOT_TAG = "static-strategy";
     
-    public static final String DATA_SOURCE_TAG = "data-source-rule";
+    public static final String WRITE_DATA_SOURCE_NAME = "write-data-source-name";
     
-    public static final String READWRITE_SPLITTING_DATA_SOURCE_ID_ATTRIBUTE = "id";
-    
-    public static final String READWRITE_SPLITTING_TYPE = "type";
-    
-    public static final String READWRITE_SPLITTING_PROPS = "props";
-    
-    public static final String LOAD_BALANCE_ALGORITHM_REF_ATTRIBUTE = "load-balance-algorithm-ref";
+    public static final String READ_DATA_SOURCE_NAMES = "read-data-source-names";
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
index 3f97015fa17..74f04742df8 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/main/resources/META-INF/namespace/readwrite-splitting.xsd
@@ -34,14 +34,30 @@
 
     <xsd:element name="data-source-rule">
         <xsd:complexType>
-            <xsd:all>
-                <xsd:element ref="beans:props" minOccurs="0" />
-            </xsd:all>
+            <xsd:sequence>
+                <xsd:element ref="static-strategy" minOccurs="0" />
+                <xsd:element ref="dynamic-strategy" minOccurs="0" />
+            </xsd:sequence>
             <xsd:attribute name="id" type="xsd:string" use="required" />
-            <xsd:attribute name="type" type="xsd:string" />
             <xsd:attribute name="load-balance-algorithm-ref" type="xsd:string" />
         </xsd:complexType>
     </xsd:element>
+
+    <xsd:element name="static-strategy">
+        <xsd:complexType>
+            <xsd:attribute name="id" type="xsd:string" use="required" />
+            <xsd:attribute name="write-data-source-name" type="xsd:string" use="required" />
+            <xsd:attribute name="read-data-source-names" type="xsd:string" use="required" />
+        </xsd:complexType>
+    </xsd:element>
+
+    <xsd:element name="dynamic-strategy">
+        <xsd:complexType>
+            <xsd:attribute name="id" type="xsd:string" use="required" />
+            <xsd:attribute name="auto-aware-data-source-name" type="xsd:string" use="required" />
+            <xsd:attribute name="write-data-source-query-enabled" type="xsd:string" />
+        </xsd:complexType>
+    </xsd:element>
     
     <xsd:element name="load-balance-algorithm">
         <xsd:complexType>
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/ReadwriteSplittingSpringNamespaceTest.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritespli [...]
index fbd01f1b127..10c6275ae64 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/ReadwriteSplittingSpringNamespaceTest.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/java/org/apache/shardingsphere/readwritesplitting/spring/namespace/ReadwriteSplittingSpringNamespaceTest.java
@@ -26,11 +26,13 @@ import org.springframework.test.context.ContextConfiguration;
 import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.Map;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertNotNull;
 
 @ContextConfiguration(locations = "classpath:META-INF/spring/readwrite-splitting-application-context.xml")
 public final class ReadwriteSplittingSpringNamespaceTest extends AbstractJUnit4SpringContextTests {
@@ -62,9 +64,10 @@ public final class ReadwriteSplittingSpringNamespaceTest extends AbstractJUnit4S
     }
     
     private void assertDefaultDataSourceRule(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig) {
+        assertNotNull(dataSourceRuleConfig.getStaticStrategy());
         assertThat(dataSourceRuleConfig.getName(), is("default_ds"));
-        assertThat(dataSourceRuleConfig.getProps().getProperty("write-data-source-name"), is("write_ds"));
-        assertThat(dataSourceRuleConfig.getProps().getProperty("read-data-source-names"), is("read_ds_0, read_ds_1"));
+        assertThat(dataSourceRuleConfig.getStaticStrategy().getWriteDataSourceName(), is("write_ds"));
+        assertThat(dataSourceRuleConfig.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("read_ds_0", "read_ds_1")));
         assertThat(dataSourceRuleConfig.getLoadBalancerName(), is(""));
     }
     
@@ -77,8 +80,9 @@ public final class ReadwriteSplittingSpringNamespaceTest extends AbstractJUnit4S
     
     private void assertRandomDataSourceRule(final ReadwriteSplittingDataSourceRuleConfiguration dataSourceRuleConfig) {
         assertThat(dataSourceRuleConfig.getName(), is("random_ds"));
-        assertThat(dataSourceRuleConfig.getProps().getProperty("write-data-source-name"), is("write_ds"));
-        assertThat(dataSourceRuleConfig.getProps().getProperty("read-data-source-names"), is("read_ds_0, read_ds_1"));
+        assertNotNull(dataSourceRuleConfig.getStaticStrategy());
+        assertThat(dataSourceRuleConfig.getStaticStrategy().getWriteDataSourceName(), is("write_ds"));
+        assertThat(dataSourceRuleConfig.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("read_ds_0", "read_ds_1")));
         assertThat(dataSourceRuleConfig.getLoadBalancerName(), is("randomLoadbalancer"));
     }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/resources/META-INF/spring/readwrite-splitting-application-context.xml b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/resources/META-INF/spring/readwrite-splitting-application-context.xml
index 12261adf8ec..f4327a94206 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/resources/META-INF/spring/readwrite-splitting-application-context.xml
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-spring/shardingsphere-readwrite-splitting-spring-namespace/src/test/resources/META-INF/spring/readwrite-splitting-application-context.xml
@@ -27,20 +27,14 @@
     <readwrite-splitting:load-balance-algorithm id="randomLoadbalancer" type="RANDOM" />
     
     <readwrite-splitting:rule id="defaultRule">
-        <readwrite-splitting:data-source-rule id="default_ds" type="Static">
-            <props>
-                <prop key="write-data-source-name">write_ds</prop>
-                <prop key="read-data-source-names">read_ds_0, read_ds_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="default_ds" >
+            <readwrite-splitting:static-strategy id="StaticReadwriteSplittingStrategy" write-data-source-name="write_ds" read-data-source-names="read_ds_0, read_ds_1" />
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
-    
+
     <readwrite-splitting:rule id="randomRule">
-        <readwrite-splitting:data-source-rule id="random_ds" type="Static" load-balance-algorithm-ref="randomLoadbalancer">
-            <props>
-                <prop key="write-data-source-name">write_ds</prop>
-                <prop key="read-data-source-names">read_ds_0, read_ds_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="random_ds" load-balance-algorithm-ref="randomLoadbalancer">
+            <readwrite-splitting:static-strategy id="StaticReadwriteSplittingStrategy" write-data-source-name="write_ds" read-data-source-names="read_ds_0, read_ds_1" />
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
 </beans>
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/resources/config/config-readwrite-splitting.yaml b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/resources/config/config-readwrite-splitting.yaml
index f5c7b31f723..7e26fab49f2 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/resources/config/config-readwrite-splitting.yaml
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/resources/config/config-readwrite-splitting.yaml
@@ -21,10 +21,10 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     test_ds:
-      type: Static
-      props:
-        write-data-source-name: test_primary_ds
-        read-data-source-names: test_replica_ds
+      staticStrategy:
+        writeDataSourceName: test_primary_ds
+        readDataSourceNames:
+          - test_replica_ds
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
index 78a7b41e997..e31ac8b356e 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
@@ -24,9 +24,8 @@ spring.shardingsphere.datasource.ds1.type=org.apache.shardingsphere.test.mock.Mo
 
 spring.shardingsphere.rules.readwrite-splitting.load-balancers.random.type=RANDOM
 
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.type=Static
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.write-data-source-name=write_ds
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.props.read-data-source-names=read_ds_0,read_ds_1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=write_ds
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=read_ds_0,read_ds_1
 spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=random
 
 spring.shardingsphere.rules.sharding.sharding-algorithms.databaseShardingAlgorithm.type=INLINE
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/resources/spring/included/rules-context.xml b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/resources/spring/included/rules-context.xml
index ca9169a58c7..7db40aeee30 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/resources/spring/included/rules-context.xml
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/resources/spring/included/rules-context.xml
@@ -66,17 +66,11 @@
     </encrypt:rule>
     
     <readwrite-splitting:rule id="readWriteSplittingRule">
-        <readwrite-splitting:data-source-rule id="ds_0" type="Static">
-            <props>
-                <prop key="write-data-source-name">ds_0_write</prop>
-                <prop key="read-data-source-names">ds_0_read_0, ds_0_read_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="ds_0">
+            <readwrite-splitting:static-strategy id="staticReadwriteSplittingStrategyWithDs0" write-data-source-name="ds_0_write" read-data-source-names="ds_0_read_0, ds_0_read_1"/>
         </readwrite-splitting:data-source-rule>
-        <readwrite-splitting:data-source-rule id="ds_1" type="Static">
-            <props>
-                <prop key="write-data-source-name">ds_1_write</prop>
-                <prop key="read-data-source-names">ds_1_read_0, ds_1_read_1</prop>
-            </props>
+        <readwrite-splitting:data-source-rule id="ds_1">
+            <readwrite-splitting:static-strategy id="staticReadwriteSplittingStrategyWithDs1" write-data-source-name="ds_1_write" read-data-source-names="ds_1_read_0, ds_1_read_1"/>
         </readwrite-splitting:data-source-rule>
     </readwrite-splitting:rule>
     
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java
index aa8872a6a50..dffc8bc2036 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java
@@ -21,7 +21,6 @@ import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmC
 import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
 import org.apache.shardingsphere.infra.distsql.exception.resource.RequiredResourceMissedException;
 import org.apache.shardingsphere.infra.distsql.exception.rule.InvalidAlgorithmConfigurationException;
-import org.apache.shardingsphere.infra.expr.InlineExpressionParser;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
@@ -56,14 +55,16 @@ public final class ReadwriteSplittingRuleConfigurationImportChecker {
         Collection<String> requireResources = new LinkedHashSet<>();
         Collection<String> requireDiscoverableResources = new LinkedHashSet<>();
         currentRuleConfig.getDataSources().forEach(each -> {
-            if (each.getAutoAwareDataSourceName().isPresent()) {
-                requireDiscoverableResources.add(each.getAutoAwareDataSourceName().get());
+            if (null != each.getDynamicStrategy()) {
+                requireDiscoverableResources.add(each.getDynamicStrategy().getAutoAwareDataSourceName());
             }
-            if (each.getWriteDataSourceName().isPresent()) {
-                requireResources.add(each.getWriteDataSourceName().get());
-            }
-            if (each.getReadDataSourceNames().isPresent()) {
-                requireResources.addAll(new InlineExpressionParser(each.getReadDataSourceNames().get()).splitAndEvaluate());
+            if (null != each.getStaticStrategy()) {
+                if (null != each.getStaticStrategy().getWriteDataSourceName()) {
+                    requireResources.add(each.getStaticStrategy().getWriteDataSourceName());
+                }
+                if (!each.getStaticStrategy().getReadDataSourceNames().isEmpty()) {
+                    requireResources.addAll(each.getStaticStrategy().getReadDataSourceNames());
+                }
             }
         });
         Collection<String> notExistResources = database.getResource().getNotExistedResources(requireResources);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/RulesUsedResourceQueryResultSet.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/RulesUsedResourceQueryResultSet.java
index 8b907004104..1f5d4ff3e09 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/RulesUsedResourceQueryResultSet.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/RulesUsedResourceQueryResultSet.java
@@ -100,11 +100,13 @@ public final class RulesUsedResourceQueryResultSet implements DistSQLResultSet {
         Collection<Collection<Object>> result = new LinkedList<>();
         ReadwriteSplittingRuleConfiguration config = (ReadwriteSplittingRuleConfiguration) rule.get().getConfiguration();
         for (ReadwriteSplittingDataSourceRuleConfiguration each : config.getDataSources()) {
-            if (each.getWriteDataSourceName().isPresent() && each.getWriteDataSourceName().get().equalsIgnoreCase(resourceName)) {
-                result.add(buildRow(READWRITE_SPLITTING, each.getName()));
-            }
-            if (each.getReadDataSourceNames().isPresent() && Arrays.asList(each.getReadDataSourceNames().get().split(",")).contains(resourceName)) {
-                result.add(buildRow(READWRITE_SPLITTING, each.getName()));
+            if (null != each.getStaticStrategy()) {
+                if (each.getStaticStrategy().getWriteDataSourceName().equalsIgnoreCase(resourceName)) {
+                    result.add(buildRow(READWRITE_SPLITTING, each.getName()));
+                }
+                if (each.getStaticStrategy().getReadDataSourceNames().contains(resourceName)) {
+                    result.add(buildRow(READWRITE_SPLITTING, each.getName()));
+                }
             }
         }
         return result;
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/ProxyConfigurationLoaderTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/ProxyConfigurationLoaderTest.java
index f22c663cd73..a357c4d3f3e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/ProxyConfigurationLoaderTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/ProxyConfigurationLoaderTest.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfigurat
 import org.junit.Test;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Optional;
 
@@ -92,9 +93,9 @@ public final class ProxyConfigurationLoaderTest {
     }
     
     private void assertReadwriteSplittingRuleConfiguration(final YamlReadwriteSplittingDataSourceRuleConfiguration actual) {
-        assertNotNull(actual.getProps());
-        assertThat(actual.getProps().getProperty("write-data-source-name"), is("write_ds"));
-        assertThat(actual.getProps().getProperty("read-data-source-names"), is("read_ds_0,read_ds_1"));
+        assertNotNull(actual.getStaticStrategy());
+        assertThat(actual.getStaticStrategy().getWriteDataSourceName(), is("write_ds"));
+        assertThat(actual.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("read_ds_0", "read_ds_1")));
     }
     
     private void assertEncryptRuleConfiguration(final YamlProxyDatabaseConfiguration actual) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapperTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapperTest.java
index b2fed8cc3af..30099f2bbf6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapperTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/config/yaml/swapper/YamlProxyConfigurationSwapperTest.java
@@ -34,10 +34,12 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Properties;
+import java.util.Arrays;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
 
 public final class YamlProxyConfigurationSwapperTest {
     
@@ -78,10 +80,9 @@ public final class YamlProxyConfigurationSwapperTest {
         assertThat(actual.getDataSources().size(), is(1));
         ReadwriteSplittingDataSourceRuleConfiguration dataSource = actual.getDataSources().iterator().next();
         assertThat(dataSource.getName(), is("readwrite_ds"));
-        assertThat(dataSource.getType(), is("Static"));
-        assertThat(dataSource.getProps().size(), is(2));
-        assertThat(dataSource.getProps().getProperty("read-data-source-names"), is("foo_db"));
-        assertThat(dataSource.getProps().getProperty("write-data-source-name"), is("foo_db"));
+        assertNotNull(dataSource.getStaticStrategy());
+        assertThat(dataSource.getStaticStrategy().getWriteDataSourceName(), is("foo_db"));
+        assertThat(dataSource.getStaticStrategy().getReadDataSourceNames(), is(Arrays.asList("foo_db")));
         assertThat(actual.getLoadBalancers().size(), is(1));
         ShardingSphereAlgorithmConfiguration loadBalancer = actual.getLoadBalancers().get("round_robin");
         assertThat(loadBalancer.getProps().size(), is(1));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DatabaseRulesCountResultSetTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DatabaseRulesCountResultSetTest.java
index a9d8f4033c8..cefc97d7ce9 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DatabaseRulesCountResultSetTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/DatabaseRulesCountResultSetTest.java
@@ -28,6 +28,7 @@ import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRule
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.rule.DatabaseRulesCountResultSet;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.apache.shardingsphere.shadow.rule.ShadowRule;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -42,7 +43,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Optional;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
@@ -134,7 +134,8 @@ public final class DatabaseRulesCountResultSetTest {
     private ReadwriteSplittingRule mockReadwriteSplittingRule() {
         ReadwriteSplittingRule result = mock(ReadwriteSplittingRule.class);
         ReadwriteSplittingRuleConfiguration config = mock(ReadwriteSplittingRuleConfiguration.class);
-        when(config.getDataSources()).thenReturn(Collections.singletonList(new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_splitting", "", new Properties(), "")));
+        when(config.getDataSources()).thenReturn(Collections.singletonList(new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_splitting",
+                new StaticReadwriteSplittingStrategyConfiguration("", Collections.emptyList()), null, "")));
         when(result.getConfiguration()).thenReturn(config);
         return result;
     }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RulesUsedResourceQueryResultSetTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RulesUsedResourceQueryResultSetTest.java
index e4dad9b7b0e..80cc92cbfb8 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RulesUsedResourceQueryResultSetTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RulesUsedResourceQueryResultSetTest.java
@@ -31,6 +31,7 @@ import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRule
 import org.apache.shardingsphere.proxy.backend.text.distsql.rql.rule.RulesUsedResourceQueryResultSet;
 import org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
 import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
@@ -47,7 +48,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Optional;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertFalse;
@@ -94,18 +94,12 @@ public final class RulesUsedResourceQueryResultSetTest {
     private ReadwriteSplittingRule mockReadwriteSplittingRule() {
         ReadwriteSplittingRule result = mock(ReadwriteSplittingRule.class);
         ReadwriteSplittingRuleConfiguration config = mock(ReadwriteSplittingRuleConfiguration.class);
-        when(config.getDataSources()).thenReturn(Collections.singleton(new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_splitting_source", "", createReadwriteSplittingProperties(), "")));
+        when(config.getDataSources()).thenReturn(Collections.singleton(new ReadwriteSplittingDataSourceRuleConfiguration("readwrite_splitting_source",
+                new StaticReadwriteSplittingStrategyConfiguration("foo_ds", Arrays.asList("foo_ds", "bar_ds")), null, "")));
         when(result.getConfiguration()).thenReturn(config);
         return result;
     }
     
-    private Properties createReadwriteSplittingProperties() {
-        Properties result = new Properties();
-        result.setProperty("write-data-source-name", "foo_ds");
-        result.setProperty("read-data-source-names", "foo_ds,bar_ds");
-        return result;
-    }
-    
     private DatabaseDiscoveryRule mockDatabaseDiscoveryRule() {
         DatabaseDiscoveryRule result = mock(DatabaseDiscoveryRule.class);
         DatabaseDiscoveryRuleConfiguration config = mock(DatabaseDiscoveryRuleConfiguration.class);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/config_loader/config-readwrite-splitting.yaml b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/config_loader/config-readwrite-splitting.yaml
index 0f69e48f079..428ae4a8743 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/config_loader/config-readwrite-splitting.yaml
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/config_loader/config-readwrite-splitting.yaml
@@ -50,7 +50,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds_0,read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/import/config-readwrite-splitting.yaml b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/import/config-readwrite-splitting.yaml
index 1066ac7555b..5a80db2e32c 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/import/config-readwrite-splitting.yaml
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/import/config-readwrite-splitting.yaml
@@ -50,7 +50,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds_0,read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/swap/config-readwrite-splitting.yaml b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/swap/config-readwrite-splitting.yaml
index 5fbf8949e33..b1edb518a7e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/swap/config-readwrite-splitting.yaml
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/resources/conf/swap/config-readwrite-splitting.yaml
@@ -33,10 +33,10 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: foo_db
-        read-data-source-names: foo_db
+      staticStrategy:
+        writeDataSourceName: foo_db
+        readDataSourceNames:
+          - foo_db
 
   loadBalancers:
     round_robin:
diff --git a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml
index 2f0e2b7ec03..cdb3929cde6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml
+++ b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/resources/conf/config-readwrite-splitting.yaml
@@ -57,10 +57,11 @@
 #- !READWRITE_SPLITTING
 #  dataSources:
 #    readwrite_ds:
-#      type: Static
-#      props:
-#        write-data-source-name: primary_ds
-#        read-data-source-names: replica_ds_0,replica_ds_1
+#      staticStrategy:
+#        writeDataSourceName: primary_ds
+#        readDataSourceNames:
+#          - replica_ds_0
+#          - replica_ds_1
 #      loadBalancerName: random
 #  loadBalancers:
 #    random:
@@ -107,10 +108,11 @@
 #- !READWRITE_SPLITTING
 #  dataSources:
 #    readwrite_ds:
-#      type: Static
-#      props:
-#        write-data-source-name: write_ds
-#        read-data-source-names: read_ds_0,read_ds_1
+#      staticStrategy:
+#        writeDataSourceName: write_ds
+#        readDataSourceNames:
+#          - read_ds_0
+#          - read_ds_1
 #      loadBalancerName: random
 #  loadBalancers:
 #    random:
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithProps.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithProps.yaml
index 1e65eb2a217..60c6da64dac 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithProps.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithProps.yaml
@@ -42,10 +42,11 @@ rules:
   - !READWRITE_SPLITTING
     dataSources:
       readwrite_ds:
-        type: Static
-        props:
-          write-data-source-name: db_write
-          read-data-source-names: read_ds_0,read_ds_1
+        staticStrategy:
+          writeDataSourceName: db_write
+          readDataSourceNames:
+            - read_ds_0
+            - read_ds_1
 
 mode:
   type: Cluster
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithoutProps.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithoutProps.yaml
index 28257ce699a..8bce0dff6a3 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithoutProps.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/readwrite_splitting/configWithReadwriteSplittingDataSourceWithoutProps.yaml
@@ -42,10 +42,11 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: db_write
-        read-data-source-names: read_ds_0,read_ds_1
+      staticStrategy:
+        writeDataSourceName: db_write
+        readDataSourceNames:
+          - read_ds_0
+          - read_ds_1
 
 mode:
   type: Cluster
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithProps.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithProps.yaml
index 694e6edc0f6..b5fa286b518 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithProps.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithProps.yaml
@@ -107,16 +107,16 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: random
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
       loadBalancerName: roundRobin
   loadBalancers:
     random:
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithoutProps.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithoutProps.yaml
index 32fa5161c78..fd532f8a92f 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithoutProps.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithDataSourceWithoutProps.yaml
@@ -111,16 +111,16 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithProps.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithProps.yaml
index 1b63cb9c82a..b11d2e7810f 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithProps.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithProps.yaml
@@ -86,16 +86,16 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
   loadBalancers:
     roundRobin:
       type: ROUND_ROBIN
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithoutProps.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithoutProps.yaml
index 947886c327e..fddd760798c 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithoutProps.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/integrate/sharding_readwrite_splitting/configWithoutDataSourceWithoutProps.yaml
@@ -86,16 +86,16 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
   loadBalancers:
     roundRobin:
       type: ROUND_ROBIN
diff --git a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/unit/sharding.yaml b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/unit/sharding.yaml
index 919eef9a460..1dd789bd36e 100644
--- a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/unit/sharding.yaml
+++ b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/resources/yaml/unit/sharding.yaml
@@ -97,9 +97,9 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_ds
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_ds
 props:
   sql-show: false
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting.yaml
index 781a7bdf1f0..32bfb2b4f31 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting.yaml
@@ -271,64 +271,64 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
       loadBalancerName: roundRobin
     readwrite_ds_2:
-      type: Static
-      props:
-        write-data-source-name: write_ds_2
-        read-data-source-names: read_ds_2
+      staticStrategy:
+        writeDataSourceName: write_ds_2
+        readDataSourceNames:
+          - read_ds_2
       loadBalancerName: roundRobin
     readwrite_ds_3:
-      type: Static
-      props:
-        write-data-source-name: write_ds_3
-        read-data-source-names: read_ds_3
+      staticStrategy:
+        writeDataSourceName: write_ds_3
+        readDataSourceNames:
+          - read_ds_3
       loadBalancerName: roundRobin
     readwrite_ds_4:
-      type: Static
-      props:
-        write-data-source-name: write_ds_4
-        read-data-source-names: read_ds_4
+      staticStrategy:
+        writeDataSourceName: write_ds_4
+        readDataSourceNames:
+          - read_ds_4
       loadBalancerName: roundRobin
     readwrite_ds_5:
-      type: Static
-      props:
-        write-data-source-name: write_ds_5
-        read-data-source-names: read_ds_5
+      staticStrategy:
+        writeDataSourceName: write_ds_5
+        readDataSourceNames:
+          - read_ds_5
       loadBalancerName: roundRobin
     readwrite_ds_6:
-      type: Static
-      props:
-        write-data-source-name: write_ds_6
-        read-data-source-names: read_ds_6
+      staticStrategy:
+        writeDataSourceName: write_ds_6
+        readDataSourceNames:
+          - read_ds_6
       loadBalancerName: roundRobin
     readwrite_ds_7:
-      type: Static
-      props:
-        write-data-source-name: write_ds_7
-        read-data-source-names: read_ds_7
+      staticStrategy:
+        writeDataSourceName: write_ds_7
+        readDataSourceNames:
+          - read_ds_7
       loadBalancerName: roundRobin
     readwrite_ds_8:
-      type: Static
-      props:
-        write-data-source-name: write_ds_8
-        read-data-source-names: read_ds_8
+      staticStrategy:
+        writeDataSourceName: write_ds_8
+        readDataSourceNames:
+          - read_ds_8
       loadBalancerName: roundRobin
     readwrite_ds_9:
-      type: Static
-      props:
-        write-data-source-name: write_ds_9
-        read-data-source-names: read_ds_9
+      staticStrategy:
+        writeDataSourceName: write_ds_9
+        readDataSourceNames:
+          - read_ds_9
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting.yaml
index 72e59dcf471..ea9235ceb1b 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting.yaml
@@ -271,64 +271,64 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
       loadBalancerName: roundRobin
     readwrite_ds_2:
-      type: Static
-      props:
-        write-data-source-name: write_ds_2
-        read-data-source-names: read_ds_2
+      staticStrategy:
+        writeDataSourceName: write_ds_2
+        readDataSourceNames:
+          - read_ds_2
       loadBalancerName: roundRobin
     readwrite_ds_3:
-      type: Static
-      props:
-        write-data-source-name: write_ds_3
-        read-data-source-names: read_ds_3
+      staticStrategy:
+        writeDataSourceName: write_ds_3
+        readDataSourceNames:
+          - read_ds_3
       loadBalancerName: roundRobin
     readwrite_ds_4:
-      type: Static
-      props:
-        write-data-source-name: write_ds_4
-        read-data-source-names: read_ds_4
+      staticStrategy:
+        writeDataSourceName: write_ds_4
+        readDataSourceNames:
+          - read_ds_4
       loadBalancerName: roundRobin
     readwrite_ds_5:
-      type: Static
-      props:
-        write-data-source-name: write_ds_5
-        read-data-source-names: read_ds_5
+      staticStrategy:
+        writeDataSourceName: write_ds_5
+        readDataSourceNames:
+          - read_ds_5
       loadBalancerName: roundRobin
     readwrite_ds_6:
-      type: Static
-      props:
-        write-data-source-name: write_ds_6
-        read-data-source-names: read_ds_6
+      staticStrategy:
+        writeDataSourceName: write_ds_6
+        readDataSourceNames:
+          - read_ds_6
       loadBalancerName: roundRobin
     readwrite_ds_7:
-      type: Static
-      props:
-        write-data-source-name: write_ds_7
-        read-data-source-names: read_ds_7
+      staticStrategy:
+        writeDataSourceName: write_ds_7
+        readDataSourceNames:
+          - read_ds_7
       loadBalancerName: roundRobin
     readwrite_ds_8:
-      type: Static
-      props:
-        write-data-source-name: write_ds_8
-        read-data-source-names: read_ds_8
+      staticStrategy:
+        writeDataSourceName: write_ds_8
+        readDataSourceNames:
+          - read_ds_8
       loadBalancerName: roundRobin
     readwrite_ds_9:
-      type: Static
-      props:
-        write-data-source-name: write_ds_9
-        read-data-source-names: read_ds_9
+      staticStrategy:
+        writeDataSourceName: write_ds_9
+        readDataSourceNames:
+          - read_ds_9
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/rules.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/rules.yaml
index 13cb4e427d1..c29018578de 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/rules.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting/rules.yaml
@@ -88,64 +88,64 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: write_ds_0
-        read-data-source-names: read_ds_0
+      staticStrategy:
+        writeDataSourceName: write_ds_0
+        readDataSourceNames:
+          - read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: write_ds_1
-        read-data-source-names: read_ds_1
+      staticStrategy:
+        writeDataSourceName: write_ds_1
+        readDataSourceNames:
+          - read_ds_1
       loadBalancerName: roundRobin
     readwrite_ds_2:
-      type: Static
-      props:
-        write-data-source-name: write_ds_2
-        read-data-source-names: read_ds_2
+      staticStrategy:
+        writeDataSourceName: write_ds_2
+        readDataSourceNames:
+          - read_ds_2
       loadBalancerName: roundRobin
     readwrite_ds_3:
-      type: Static
-      props:
-        write-data-source-name: write_ds_3
-        read-data-source-names: read_ds_3
+      staticStrategy:
+        writeDataSourceName: write_ds_3
+        readDataSourceNames:
+          - read_ds_3
       loadBalancerName: roundRobin
     readwrite_ds_4:
-      type: Static
-      props:
-        write-data-source-name: write_ds_4
-        read-data-source-names: read_ds_4
+      staticStrategy:
+        writeDataSourceName: write_ds_4
+        readDataSourceNames:
+          - read_ds_4
       loadBalancerName: roundRobin
     readwrite_ds_5:
-      type: Static
-      props:
-        write-data-source-name: write_ds_5
-        read-data-source-names: read_ds_5
+      staticStrategy:
+        writeDataSourceName: write_ds_5
+        readDataSourceNames:
+          - read_ds_5
       loadBalancerName: roundRobin
     readwrite_ds_6:
-      type: Static
-      props:
-        write-data-source-name: write_ds_6
-        read-data-source-names: read_ds_6
+      staticStrategy:
+        writeDataSourceName: write_ds_6
+        readDataSourceNames:
+          - read_ds_6
       loadBalancerName: roundRobin
     readwrite_ds_7:
-      type: Static
-      props:
-        write-data-source-name: write_ds_7
-        read-data-source-names: read_ds_7
+      staticStrategy:
+        writeDataSourceName: write_ds_7
+        readDataSourceNames:
+          - read_ds_7
       loadBalancerName: roundRobin
     readwrite_ds_8:
-      type: Static
-      props:
-        write-data-source-name: write_ds_8
-        read-data-source-names: read_ds_8
+      staticStrategy:
+        writeDataSourceName: write_ds_8
+        readDataSourceNames:
+          - read_ds_8
       loadBalancerName: roundRobin
     readwrite_ds_9:
-      type: Static
-      props:
-        write-data-source-name: write_ds_9
-        read-data-source-names: read_ds_9
+      staticStrategy:
+        writeDataSourceName: write_ds_9
+        readDataSourceNames:
+          - read_ds_9
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 89f982e914b..6370ed711cc 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/mysql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -283,64 +283,64 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_0
-        read-data-source-names: encrypt_read_ds_0
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_0
+        readDataSourceNames:
+          - encrypt_read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_1
-        read-data-source-names: encrypt_read_ds_1
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_1
+        readDataSourceNames:
+          - encrypt_read_ds_1
       loadBalancerName: roundRobin
     readwrite_ds_2:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_2
-        read-data-source-names: encrypt_read_ds_2
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_2
+        readDataSourceNames:
+          - encrypt_read_ds_2
       loadBalancerName: roundRobin
     readwrite_ds_3:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_3
-        read-data-source-names: encrypt_read_ds_3
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_3
+        readDataSourceNames:
+          - encrypt_read_ds_3
       loadBalancerName: roundRobin
     readwrite_ds_4:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_4
-        read-data-source-names: encrypt_read_ds_4
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_4
+        readDataSourceNames:
+          - encrypt_read_ds_4
       loadBalancerName: roundRobin
     readwrite_ds_5:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_5
-        read-data-source-names: encrypt_read_ds_5
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_5
+        readDataSourceNames:
+          - encrypt_read_ds_5
       loadBalancerName: roundRobin
     readwrite_ds_6:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_6
-        read-data-source-names: encrypt_read_ds_6
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_6
+        readDataSourceNames:
+          - encrypt_read_ds_6
       loadBalancerName: roundRobin
     readwrite_ds_7:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_7
-        read-data-source-names: encrypt_read_ds_7
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_7
+        readDataSourceNames:
+          - encrypt_read_ds_7
       loadBalancerName: roundRobin
     readwrite_ds_8:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_8
-        read-data-source-names: encrypt_read_ds_8
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_8
+        readDataSourceNames:
+          - encrypt_read_ds_8
       loadBalancerName: roundRobin
     readwrite_ds_9:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_9
-        read-data-source-names: encrypt_read_ds_9
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_9
+        readDataSourceNames:
+          - encrypt_read_ds_9
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
index 25e14f52c05..f544ce35c62 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/proxy/conf/postgresql/config-dbtbl-with-readwrite-splitting-and-encrypt.yaml
@@ -283,64 +283,64 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_0
-        read-data-source-names: encrypt_read_ds_0
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_0
+        readDataSourceNames:
+          - encrypt_read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_1
-        read-data-source-names: encrypt_read_ds_1
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_1
+        readDataSourceNames:
+          - encrypt_read_ds_1
       loadBalancerName: roundRobin
     readwrite_ds_2:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_2
-        read-data-source-names: encrypt_read_ds_2
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_2
+        readDataSourceNames:
+          - encrypt_read_ds_2
       loadBalancerName: roundRobin
     readwrite_ds_3:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_3
-        read-data-source-names: encrypt_read_ds_3
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_3
+        readDataSourceNames:
+          - encrypt_read_ds_3
       loadBalancerName: roundRobin
     readwrite_ds_4:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_4
-        read-data-source-names: encrypt_read_ds_4
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_4
+        readDataSourceNames:
+          - encrypt_read_ds_4
       loadBalancerName: roundRobin
     readwrite_ds_5:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_5
-        read-data-source-names: encrypt_read_ds_5
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_5
+        readDataSourceNames:
+          - encrypt_read_ds_5
       loadBalancerName: roundRobin
     readwrite_ds_6:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_6
-        read-data-source-names: encrypt_read_ds_6
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_6
+        readDataSourceNames:
+          - encrypt_read_ds_6
       loadBalancerName: roundRobin
     readwrite_ds_7:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_7
-        read-data-source-names: encrypt_read_ds_7
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_7
+        readDataSourceNames:
+          - encrypt_read_ds_7
       loadBalancerName: roundRobin
     readwrite_ds_8:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_8
-        read-data-source-names: encrypt_read_ds_8
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_8
+        readDataSourceNames:
+          - encrypt_read_ds_8
       loadBalancerName: roundRobin
     readwrite_ds_9:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_9
-        read-data-source-names: encrypt_read_ds_9
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_9
+        readDataSourceNames:
+          - encrypt_read_ds_9
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
index fbb1af0f0a7..2e3420bff86 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/dbtbl_with_readwrite_splitting_and_encrypt/rules.yaml
@@ -99,64 +99,64 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_0
-        read-data-source-names: encrypt_read_ds_0
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_0
+        readDataSourceNames:
+          - encrypt_read_ds_0
       loadBalancerName: roundRobin
     readwrite_ds_1:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_1
-        read-data-source-names: encrypt_read_ds_1
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_1
+        readDataSourceNames:
+          - encrypt_read_ds_1
       loadBalancerName: roundRobin
     readwrite_ds_2:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_2
-        read-data-source-names: encrypt_read_ds_2
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_2
+        readDataSourceNames:
+          - encrypt_read_ds_2
       loadBalancerName: roundRobin
     readwrite_ds_3:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_3
-        read-data-source-names: encrypt_read_ds_3
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_3
+        readDataSourceNames:
+          - encrypt_read_ds_3
       loadBalancerName: roundRobin
     readwrite_ds_4:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_4
-        read-data-source-names: encrypt_read_ds_4
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_4
+        readDataSourceNames:
+          - encrypt_read_ds_4
       loadBalancerName: roundRobin
     readwrite_ds_5:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_5
-        read-data-source-names: encrypt_read_ds_5
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_5
+        readDataSourceNames:
+          - encrypt_read_ds_5
       loadBalancerName: roundRobin
     readwrite_ds_6:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_6
-        read-data-source-names: encrypt_read_ds_6
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_6
+        readDataSourceNames:
+          - encrypt_read_ds_6
       loadBalancerName: roundRobin
     readwrite_ds_7:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_7
-        read-data-source-names: encrypt_read_ds_7
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_7
+        readDataSourceNames:
+          - encrypt_read_ds_7
       loadBalancerName: roundRobin
     readwrite_ds_8:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_8
-        read-data-source-names: encrypt_read_ds_8
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_8
+        readDataSourceNames:
+          - encrypt_read_ds_8
       loadBalancerName: roundRobin
     readwrite_ds_9:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_9
-        read-data-source-names: encrypt_read_ds_9
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_9
+        readDataSourceNames:
+          - encrypt_read_ds_9
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/mysql/config-empty-rules.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/mysql/config-empty-rules.yaml
index 9351e5b368c..a351672210e 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/mysql/config-empty-rules.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/mysql/config-empty-rules.yaml
@@ -243,10 +243,10 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_0
-        read-data-source-names: encrypt_read_ds_0
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_0
+        readDataSourceNames:
+          - encrypt_read_ds_0
       loadBalancerName: roundRobin
 
   loadBalancers:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/postgresql/config-empty-rules.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/postgresql/config-empty-rules.yaml
index f61cd912d15..da72a89313e 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/postgresql/config-empty-rules.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/empty_rules/proxy/conf/postgresql/config-empty-rules.yaml
@@ -243,10 +243,10 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     readwrite_ds_0:
-      type: Static
-      props:
-        write-data-source-name: encrypt_write_ds_0
-        read-data-source-names: encrypt_read_ds_0
+      staticStrategy:
+        writeDataSourceName: encrypt_write_ds_0
+        readDataSourceNames:
+          - encrypt_read_ds_0
       loadBalancerName: roundRobin
   loadBalancers:
     roundRobin:
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/mysql/config-readwrite-splitting.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/mysql/config-readwrite-splitting.yaml
index fe86cc8dde4..d22fe745428 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/mysql/config-readwrite-splitting.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/mysql/config-readwrite-splitting.yaml
@@ -76,7 +76,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     write-read-ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_0,read_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_0
+          - read_1
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/postgresql/config-readwrite-splitting.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/postgresql/config-readwrite-splitting.yaml
index 65c59c3767a..6f191904e3a 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/postgresql/config-readwrite-splitting.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/proxy/conf/postgresql/config-readwrite-splitting.yaml
@@ -76,7 +76,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     write-read-ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_0,read_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_0
+          - read_1
diff --git a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/rules.yaml b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/rules.yaml
index b98c8b9ff92..4c0b9e79bb1 100644
--- a/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/rules.yaml
+++ b/shardingsphere-test/shardingsphere-integration-test/shardingsphere-integration-test-suite/src/test/resources/env/scenario/readwrite_splitting/rules.yaml
@@ -45,7 +45,8 @@ rules:
 - !READWRITE_SPLITTING
   dataSources:
     write-read-ds:
-      type: Static
-      props:
-        write-data-source-name: write_ds
-        read-data-source-names: read_0, read_1
+      staticStrategy:
+        writeDataSourceName: write_ds
+        readDataSourceNames:
+          - read_0
+          - read_1