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

zhaojinchao 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 67d9fd1afde Refactor RepositoryTupleSwapper (#31072)
67d9fd1afde is described below

commit 67d9fd1afde112bebd81c775455dc2e08b0ab24a
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Apr 30 15:47:00 2024 +0800

    Refactor RepositoryTupleSwapper (#31072)
    
    * Fix test cases
    
    * Refactor RepositoryTupleSwapper
---
 ...astRuleConfigurationRepositoryTupleSwapper.java |  9 ++++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  7 +++++--
 ...yptRuleConfigurationRepositoryTupleSwapper.java | 14 +++++++++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  7 +++++--
 ...askRuleConfigurationRepositoryTupleSwapper.java | 14 +++++++++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  8 +++++---
 ...ingRuleConfigurationRepositoryTupleSwapper.java | 16 +++++++++++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java | 22 +++++++++++++---------
 ...dowRuleConfigurationRepositoryTupleSwapper.java | 20 +++++++++++++++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  7 +++++--
 ...ingRuleConfigurationRepositoryTupleSwapper.java | 17 ++++++++++++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  7 +++++--
 .../rule/YamlRuleConfigurationSwapperEngine.java   | 13 +++++++++++++
 ...ityRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  7 +++++--
 ...ockRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  5 ++---
 ...ingRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  6 +++++-
 .../database/rule/DatabaseRulePersistService.java  | 14 +++++++++-----
 .../config/global/GlobalRulePersistService.java    |  4 +++-
 ...gleRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  4 ++--
 ...ionRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  5 ++---
 ...serRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  6 ++----
 ...torRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  4 ++--
 ...ficRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  4 ++--
 ...ionRuleConfigurationRepositoryTupleSwapper.java |  7 ++++++-
 ...uleConfigurationRepositoryTupleSwapperTest.java |  9 ++-------
 .../mode/spi/RepositoryTupleSwapper.java           | 12 +++++++++++-
 34 files changed, 236 insertions(+), 68 deletions(-)

diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
index 2ce06657763..b189b741f80 100644
--- 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapper.java
@@ -35,12 +35,19 @@ import java.util.stream.Collectors;
 /**
  * Broadcast rule configuration repository tuple swapper.
  */
-public final class BroadcastRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<BroadcastRuleConfiguration> {
+public final class BroadcastRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<BroadcastRuleConfiguration, 
YamlBroadcastRuleConfiguration> {
     
     private final YamlBroadcastRuleConfigurationSwapper ruleConfigSwapper = 
new YamlBroadcastRuleConfigurationSwapper();
     
     private final RuleNodePath broadcastRuleNodePath = new 
BroadcastRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlBroadcastRuleConfiguration yamlRuleConfig) {
+        return yamlRuleConfig.getTables().isEmpty()
+                ? Collections.emptyList()
+                : Collections.singleton(new 
RepositoryTuple(BroadcastRuleNodePathProvider.TABLES, 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
BroadcastRuleConfiguration data) {
         return data.getTables().isEmpty()
diff --git 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
index b0d219df024..e29b140d1e1 100644
--- 
a/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/features/broadcast/core/src/test/java/org/apache/shardingsphere/broadcast/yaml/swapper/BroadcastRuleConfigurationRepositoryTupleSwapperTest.java
@@ -18,7 +18,9 @@
 package org.apache.shardingsphere.broadcast.yaml.swapper;
 
 import 
org.apache.shardingsphere.broadcast.api.config.BroadcastRuleConfiguration;
+import 
org.apache.shardingsphere.broadcast.yaml.config.YamlBroadcastRuleConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -38,12 +40,13 @@ class BroadcastRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuplesWithEmptyRule() {
-        assertTrue(swapper.swapToRepositoryTuples(new 
BroadcastRuleConfiguration(Collections.emptyList())).isEmpty());
+        assertTrue(swapper.swapToRepositoryTuples(new 
YamlBroadcastRuleConfiguration()).isEmpty());
     }
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(new 
BroadcastRuleConfiguration(Arrays.asList("foo_table", "foo_table2")));
+        BroadcastRuleConfiguration ruleConfig = new 
BroadcastRuleConfiguration(Arrays.asList("foo_table", "foo_table2"));
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples((YamlBroadcastRuleConfiguration) new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig));
         assertThat(actual.size(), is(1));
         Iterator<RepositoryTuple> iterator = actual.iterator();
         assertThat(iterator.next().getKey(), is("tables"));
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapper.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapper.java
index 7f6d85dedaa..98ac434ba2e 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapper.java
@@ -40,12 +40,24 @@ import java.util.stream.Collectors;
 /**
  * Encrypt rule configuration repository tuple swapper.
  */
-public final class EncryptRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<EncryptRuleConfiguration> {
+public final class EncryptRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<EncryptRuleConfiguration, YamlEncryptRuleConfiguration> {
     
     private final YamlEncryptRuleConfigurationSwapper ruleConfigSwapper = new 
YamlEncryptRuleConfigurationSwapper();
     
     private final RuleNodePath encryptRuleNodePath = new 
EncryptRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlEncryptRuleConfiguration yamlRuleConfig) {
+        Collection<RepositoryTuple> result = new LinkedList<>();
+        for (Entry<String, YamlAlgorithmConfiguration> entry : 
yamlRuleConfig.getEncryptors().entrySet()) {
+            result.add(new 
RepositoryTuple(encryptRuleNodePath.getNamedItem(EncryptRuleNodePathProvider.ENCRYPTORS).getPath(entry.getKey()),
 YamlEngine.marshal(entry.getValue())));
+        }
+        for (YamlEncryptTableRuleConfiguration each : 
yamlRuleConfig.getTables().values()) {
+            result.add(new 
RepositoryTuple(encryptRuleNodePath.getNamedItem(EncryptRuleNodePathProvider.TABLES).getPath(each.getName()),
 YamlEngine.marshal(each)));
+        }
+        return result;
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
EncryptRuleConfiguration data) {
         Collection<RepositoryTuple> result = new LinkedList<>();
diff --git 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapperTest.java
 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapperTest.java
index be16af7bdbb..314367f55eb 100644
--- 
a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/yaml/swapper/EncryptRuleConfigurationRepositoryTupleSwapperTest.java
@@ -21,8 +21,10 @@ import 
org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnItemRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
+import 
org.apache.shardingsphere.encrypt.yaml.config.YamlEncryptRuleConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -43,12 +45,13 @@ class EncryptRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuplesWithEmptyRule() {
-        assertTrue(swapper.swapToRepositoryTuples(new 
EncryptRuleConfiguration(Collections.emptyList(), 
Collections.emptyMap())).isEmpty());
+        assertTrue(swapper.swapToRepositoryTuples(new 
YamlEncryptRuleConfiguration()).isEmpty());
     }
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(createMaximumEncryptRule());
+        Collection<RepositoryTuple> actual = swapper.swapToRepositoryTuples(
+                (YamlEncryptRuleConfiguration) new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(createMaximumEncryptRule()));
         assertThat(actual.size(), is(2));
         Iterator<RepositoryTuple> iterator = actual.iterator();
         assertThat(iterator.next().getKey(), is("encryptors/FOO"));
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapper.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapper.java
index 0ec9d9b46d5..198cd0fe50c 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapper.java
@@ -40,12 +40,24 @@ import java.util.stream.Collectors;
 /**
  * Mask rule configuration repository tuple swapper.
  */
-public final class MaskRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<MaskRuleConfiguration> {
+public final class MaskRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<MaskRuleConfiguration, YamlMaskRuleConfiguration> {
     
     private final YamlMaskRuleConfigurationSwapper ruleConfigSwapper = new 
YamlMaskRuleConfigurationSwapper();
     
     private final RuleNodePath maskRuleNodePath = new 
MaskRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlMaskRuleConfiguration yamlRuleConfig) {
+        Collection<RepositoryTuple> result = new LinkedList<>();
+        for (Entry<String, YamlAlgorithmConfiguration> entry : 
yamlRuleConfig.getMaskAlgorithms().entrySet()) {
+            result.add(new 
RepositoryTuple(maskRuleNodePath.getNamedItem(MaskRuleNodePathProvider.MASK_ALGORITHMS).getPath(entry.getKey()),
 YamlEngine.marshal(entry.getValue())));
+        }
+        for (YamlMaskTableRuleConfiguration each : 
yamlRuleConfig.getTables().values()) {
+            result.add(new 
RepositoryTuple(maskRuleNodePath.getNamedItem(MaskRuleNodePathProvider.TABLES).getPath(each.getName()),
 YamlEngine.marshal(each)));
+        }
+        return result;
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
MaskRuleConfiguration data) {
         Collection<RepositoryTuple> result = new LinkedList<>();
diff --git 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapperTest.java
 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapperTest.java
index 278cbda4262..e2b81ddac2e 100644
--- 
a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/yaml/swapper/MaskRuleConfigurationRepositoryTupleSwapperTest.java
@@ -19,9 +19,11 @@ package org.apache.shardingsphere.mask.yaml.swapper;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
 import 
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
 import 
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
+import org.apache.shardingsphere.mask.yaml.config.YamlMaskRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -41,13 +43,13 @@ class MaskRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuplesWithEmptyRule() {
-        MaskRuleConfiguration ruleConfig = new 
MaskRuleConfiguration(Collections.emptyList(), Collections.emptyMap());
-        assertTrue(new 
MaskRuleConfigurationRepositoryTupleSwapper().swapToRepositoryTuples(ruleConfig).isEmpty());
+        assertTrue(new 
MaskRuleConfigurationRepositoryTupleSwapper().swapToRepositoryTuples(new 
YamlMaskRuleConfiguration()).isEmpty());
     }
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = new 
MaskRuleConfigurationRepositoryTupleSwapper().swapToRepositoryTuples(createMaximumMaskRule());
+        YamlMaskRuleConfiguration yamlRuleConfig = (YamlMaskRuleConfiguration) 
new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(createMaximumMaskRule());
+        Collection<RepositoryTuple> actual = new 
MaskRuleConfigurationRepositoryTupleSwapper().swapToRepositoryTuples(yamlRuleConfig);
         assertThat(actual.size(), is(2));
         Iterator<RepositoryTuple> iterator = actual.iterator();
         assertThat(iterator.next().getKey(), is("mask_algorithms/FIXTURE"));
diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapper.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapper.java
index 4c5003b7990..88c800d901c 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapper.java
@@ -40,12 +40,26 @@ import java.util.stream.Collectors;
 /**
  * Readwrite-splitting rule configuration repository tuple swapper.
  */
-public final class ReadwriteSplittingRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<ReadwriteSplittingRuleConfiguration> {
+public final class ReadwriteSplittingRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<ReadwriteSplittingRuleConfiguration, 
YamlReadwriteSplittingRuleConfiguration> {
     
     private final YamlReadwriteSplittingRuleConfigurationSwapper 
ruleConfigSwapper = new YamlReadwriteSplittingRuleConfigurationSwapper();
     
     private final RuleNodePath readwriteSplittingRuleNodePath = new 
ReadwriteSplittingRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlReadwriteSplittingRuleConfiguration yamlRuleConfig) {
+        Collection<RepositoryTuple> result = new LinkedList<>();
+        for (Entry<String, YamlAlgorithmConfiguration> entry : 
yamlRuleConfig.getLoadBalancers().entrySet()) {
+            result.add(new 
RepositoryTuple(readwriteSplittingRuleNodePath.getNamedItem(ReadwriteSplittingRuleNodePathProvider.LOAD_BALANCERS).getPath(entry.getKey()),
+                    YamlEngine.marshal(entry.getValue())));
+        }
+        for (Entry<String, 
YamlReadwriteSplittingDataSourceGroupRuleConfiguration> entry : 
yamlRuleConfig.getDataSourceGroups().entrySet()) {
+            result.add(new RepositoryTuple(
+                    
readwriteSplittingRuleNodePath.getNamedItem(ReadwriteSplittingRuleNodePathProvider.DATA_SOURCES).getPath(entry.getKey()),
 YamlEngine.marshal(entry.getValue())));
+        }
+        return result;
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
ReadwriteSplittingRuleConfiguration data) {
         Collection<RepositoryTuple> result = new LinkedList<>();
diff --git 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest.java
 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest.java
index 3736f9d33f4..7d428a2594b 100644
--- 
a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/yaml/swapper/ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest.java
@@ -19,9 +19,12 @@ package 
org.apache.shardingsphere.readwritesplitting.yaml.swapper;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceGroupRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.api.transaction.TransactionalReadQueryStrategy;
+import 
org.apache.shardingsphere.readwritesplitting.yaml.config.YamlReadwriteSplittingRuleConfiguration;
+import 
org.apache.shardingsphere.readwritesplitting.yaml.config.rule.YamlReadwriteSplittingDataSourceGroupRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -42,22 +45,23 @@ class 
ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuplesWithEmptyLoadBalancer() {
-        ReadwriteSplittingRuleConfiguration ruleConfig = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(new 
ReadwriteSplittingDataSourceGroupRuleConfiguration("group_0",
-                "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), null)), 
Collections.emptyMap());
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(ruleConfig);
+        YamlReadwriteSplittingRuleConfiguration yamlRuleConfig = new 
YamlReadwriteSplittingRuleConfiguration();
+        
yamlRuleConfig.setDataSourceGroups(Collections.singletonMap("foo_group", new 
YamlReadwriteSplittingDataSourceGroupRuleConfiguration()));
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(yamlRuleConfig);
         assertThat(actual.size(), is(1));
-        assertThat(actual.iterator().next().getKey(), 
is("data_sources/group_0"));
+        assertThat(actual.iterator().next().getKey(), 
is("data_sources/foo_group"));
     }
     
     @Test
     void assertSwapToRepositoryTuples() {
-        ReadwriteSplittingRuleConfiguration ruleConfig = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(new 
ReadwriteSplittingDataSourceGroupRuleConfiguration("group_0",
+        ReadwriteSplittingRuleConfiguration ruleConfig = new 
ReadwriteSplittingRuleConfiguration(Collections.singleton(new 
ReadwriteSplittingDataSourceGroupRuleConfiguration("foo_group",
                 "write_ds", Arrays.asList("read_ds_0", "read_ds_1"), 
"random")), Collections.singletonMap("random", new 
AlgorithmConfiguration("random", new Properties())));
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(ruleConfig);
+        YamlReadwriteSplittingRuleConfiguration yamlRuleConfig = 
(YamlReadwriteSplittingRuleConfiguration) new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig);
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(yamlRuleConfig);
         assertThat(actual.size(), is(2));
         Iterator<RepositoryTuple> iterator = actual.iterator();
         assertThat(iterator.next().getKey(), is("load_balancers/random"));
-        assertThat(iterator.next().getKey(), is("data_sources/group_0"));
+        assertThat(iterator.next().getKey(), is("data_sources/foo_group"));
     }
     
     @Test
@@ -67,7 +71,7 @@ class 
ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToObject() {
-        Collection<RepositoryTuple> repositoryTuples = Arrays.asList(new 
RepositoryTuple("/metadata/foo_db/rules/readwrite_splitting/data_sources/group_0/versions/0",
 "loadBalancerName: random\n"
+        Collection<RepositoryTuple> repositoryTuples = Arrays.asList(new 
RepositoryTuple("/metadata/foo_db/rules/readwrite_splitting/data_sources/foo_group/versions/0",
 "loadBalancerName: random\n"
                 + "readDataSourceNames:\n"
                 + "- read_ds_0\n"
                 + "- read_ds_1\n"
@@ -77,7 +81,7 @@ class 
ReadwriteSplittingRuleConfigurationRepositoryTupleSwapperTest {
         Optional<ReadwriteSplittingRuleConfiguration> actual = 
swapper.swapToObject(repositoryTuples);
         assertTrue(actual.isPresent());
         assertThat(actual.get().getDataSourceGroups().size(), is(1));
-        
assertThat(actual.get().getDataSourceGroups().iterator().next().getName(), 
is("group_0"));
+        
assertThat(actual.get().getDataSourceGroups().iterator().next().getName(), 
is("foo_group"));
         
assertThat(actual.get().getDataSourceGroups().iterator().next().getWriteDataSourceName(),
 is("write_ds"));
         
assertThat(actual.get().getDataSourceGroups().iterator().next().getReadDataSourceNames().size(),
 is(2));
         
assertThat(actual.get().getDataSourceGroups().iterator().next().getLoadBalancerName(),
 is("random"));
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapper.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapper.java
index 3addd29b907..52dd46c6c0d 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapper.java
@@ -42,12 +42,30 @@ import java.util.stream.Collectors;
 /**
  * Shadow rule configuration repository tuple swapper.
  */
-public final class ShadowRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<ShadowRuleConfiguration> {
+public final class ShadowRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<ShadowRuleConfiguration, YamlShadowRuleConfiguration> {
     
     private final YamlShadowRuleConfigurationSwapper ruleConfigSwapper = new 
YamlShadowRuleConfigurationSwapper();
     
     private final RuleNodePath shadowRuleNodePath = new 
ShadowRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlShadowRuleConfiguration yamlRuleConfig) {
+        Collection<RepositoryTuple> result = new LinkedList<>();
+        for (Entry<String, YamlAlgorithmConfiguration> entry : 
yamlRuleConfig.getShadowAlgorithms().entrySet()) {
+            result.add(new 
RepositoryTuple(shadowRuleNodePath.getNamedItem(ShadowRuleNodePathProvider.ALGORITHMS).getPath(entry.getKey()),
 YamlEngine.marshal(entry.getValue())));
+        }
+        if 
(!Strings.isNullOrEmpty(yamlRuleConfig.getDefaultShadowAlgorithmName())) {
+            result.add(new 
RepositoryTuple(shadowRuleNodePath.getUniqueItem(ShadowRuleNodePathProvider.DEFAULT_ALGORITHM).getPath(),
 yamlRuleConfig.getDefaultShadowAlgorithmName()));
+        }
+        for (Entry<String, YamlShadowDataSourceConfiguration> entry : 
yamlRuleConfig.getDataSources().entrySet()) {
+            result.add(new 
RepositoryTuple(shadowRuleNodePath.getNamedItem(ShadowRuleNodePathProvider.DATA_SOURCES).getPath(entry.getKey()),
 YamlEngine.marshal(entry.getValue())));
+        }
+        for (Entry<String, YamlShadowTableConfiguration> entry : 
yamlRuleConfig.getTables().entrySet()) {
+            result.add(new 
RepositoryTuple(shadowRuleNodePath.getNamedItem(ShadowRuleNodePathProvider.TABLES).getPath(entry.getKey()),
 YamlEngine.marshal(entry.getValue())));
+        }
+        return result;
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
ShadowRuleConfiguration data) {
         Collection<RepositoryTuple> result = new LinkedList<>();
diff --git 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapperTest.java
 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapperTest.java
index 8cb8e895025..89fa7703a5c 100644
--- 
a/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/features/shadow/core/src/test/java/org/apache/shardingsphere/shadow/yaml/swapper/ShadowRuleConfigurationRepositoryTupleSwapperTest.java
@@ -19,9 +19,11 @@ package org.apache.shardingsphere.shadow.yaml.swapper;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import 
org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
 import 
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
+import 
org.apache.shardingsphere.shadow.yaml.config.YamlShadowRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import java.util.Arrays;
@@ -45,12 +47,13 @@ class ShadowRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuplesWithEmptyRule() {
-        assertTrue(swapper.swapToRepositoryTuples(new 
ShadowRuleConfiguration()).isEmpty());
+        assertTrue(swapper.swapToRepositoryTuples(new 
YamlShadowRuleConfiguration()).isEmpty());
     }
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(createMaximumShadowRule());
+        YamlShadowRuleConfiguration yamlRuleConfig = 
(YamlShadowRuleConfiguration) new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(createMaximumShadowRule());
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(yamlRuleConfig);
         assertThat(actual.size(), is(4));
         Iterator<RepositoryTuple> iterator = actual.iterator();
         assertThat(iterator.next().getKey(), is("algorithms/FIXTURE"));
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
index 9e006c07014..1a002c14205 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapper.java
@@ -45,12 +45,27 @@ import java.util.stream.Collectors;
 /**
  * Sharding rule configuration repository tuple swapper.
  */
-public final class ShardingRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<ShardingRuleConfiguration> {
+public final class ShardingRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<ShardingRuleConfiguration, 
YamlShardingRuleConfiguration> {
     
     private final YamlShardingRuleConfigurationSwapper ruleConfigSwapper = new 
YamlShardingRuleConfigurationSwapper();
     
     private final RuleNodePath shardingRuleNodePath = new 
ShardingRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlShardingRuleConfiguration yamlRuleConfig) {
+        Collection<RepositoryTuple> result = new LinkedList<>();
+        swapAlgorithms(yamlRuleConfig, result);
+        swapStrategies(yamlRuleConfig, result);
+        if (null != yamlRuleConfig.getDefaultShardingColumn()) {
+            result.add(new 
RepositoryTuple(shardingRuleNodePath.getUniqueItem(ShardingRuleNodePathProvider.DEFAULT_SHARDING_COLUMN).getPath(),
 yamlRuleConfig.getDefaultShardingColumn()));
+        }
+        if (null != yamlRuleConfig.getShardingCache()) {
+            result.add(new 
RepositoryTuple(shardingRuleNodePath.getUniqueItem(ShardingRuleNodePathProvider.SHARDING_CACHE).getPath(),
 YamlEngine.marshal(yamlRuleConfig.getShardingCache())));
+        }
+        swapTableRules(yamlRuleConfig, result);
+        return result;
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
ShardingRuleConfiguration data) {
         YamlShardingRuleConfiguration yamlRuleConfig = 
ruleConfigSwapper.swapToYamlConfiguration(data);
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
index 4c6accf6187..885214039b0 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleConfigurationRepositoryTupleSwapperTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.sharding.yaml.swapper;
 
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableReferenceRuleConfiguration;
@@ -26,6 +27,7 @@ import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfi
 import 
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
+import 
org.apache.shardingsphere.sharding.yaml.config.YamlShardingRuleConfiguration;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.junit.jupiter.api.Test;
 
@@ -49,12 +51,13 @@ class ShardingRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuplesWithEmptyRule() {
-        assertTrue(swapper.swapToRepositoryTuples(new 
ShardingRuleConfiguration()).isEmpty());
+        assertTrue(swapper.swapToRepositoryTuples(new 
YamlShardingRuleConfiguration()).isEmpty());
     }
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(createMaximumShardingRule());
+        YamlShardingRuleConfiguration yamlRuleConfig = 
(YamlShardingRuleConfiguration) new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(createMaximumShardingRule());
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(yamlRuleConfig);
         assertThat(actual.size(), is(15));
         Iterator<RepositoryTuple> iterator = actual.iterator();
         assertThat(iterator.next().getKey(), 
is("algorithms/core_standard_fixture"));
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapperEngine.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapperEngine.java
index ee996329fe0..b63c2198e2b 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapperEngine.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/swapper/rule/YamlRuleConfigurationSwapperEngine.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
@@ -31,6 +32,18 @@ import java.util.stream.Collectors;
  */
 public final class YamlRuleConfigurationSwapperEngine {
     
+    /**
+     * Swap to YAML rule configuration.
+     *
+     * @param ruleConfig rule configuration
+     * @return YAML rule configuration
+     */
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    public YamlRuleConfiguration swapToYamlRuleConfiguration(final 
RuleConfiguration ruleConfig) {
+        YamlRuleConfigurationSwapper yamlSwapper = 
OrderedSPILoader.getServices(YamlRuleConfigurationSwapper.class, 
Collections.singleton(ruleConfig)).get(ruleConfig);
+        return (YamlRuleConfiguration) 
yamlSwapper.swapToYamlConfiguration(ruleConfig);
+    }
+    
     /**
      * Swap to YAML rule configurations.
      *
diff --git 
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapper.java
index 42ba53cdb78..7d2ecf600da 100644
--- 
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * Authority rule configuration repository tuple swapper.
  */
-public final class AuthorityRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<AuthorityRuleConfiguration> {
+public final class AuthorityRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<AuthorityRuleConfiguration, 
YamlAuthorityRuleConfiguration> {
     
     private final YamlAuthorityRuleConfigurationSwapper ruleConfigSwapper = 
new YamlAuthorityRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlAuthorityRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
AuthorityRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/authority/core/src/test/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/authority/core/src/test/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapperTest.java
index c476f04ac3e..802198f485f 100644
--- 
a/kernel/authority/core/src/test/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/authority/core/src/test/java/org/apache/shardingsphere/authority/yaml/swapper/AuthorityRuleConfigurationRepositoryTupleSwapperTest.java
@@ -18,9 +18,11 @@
 package org.apache.shardingsphere.authority.yaml.swapper;
 
 import org.apache.shardingsphere.authority.config.AuthorityRuleConfiguration;
+import 
org.apache.shardingsphere.authority.yaml.config.YamlAuthorityRuleConfiguration;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
 import org.junit.jupiter.api.Test;
@@ -40,8 +42,9 @@ class AuthorityRuleConfigurationRepositoryTupleSwapperTest {
     @Test
     void assertSwapToRepositoryTuples() {
         Collection<ShardingSphereUser> users = Collections.singleton(new 
ShardingSphereUser("root", "", "localhost"));
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(new AuthorityRuleConfiguration(users, new 
AlgorithmConfiguration("ALL_PERMITTED", new Properties()),
-                Collections.singletonMap("md5", new 
AlgorithmConfiguration("MD5", PropertiesBuilder.build(new 
Property("proxy-frontend-database-protocol-type", "openGauss")))), 
"scram_sha256"));
+        AuthorityRuleConfiguration ruleConfig = new 
AuthorityRuleConfiguration(users, new AlgorithmConfiguration("ALL_PERMITTED", 
new Properties()),
+                Collections.singletonMap("md5", new 
AlgorithmConfiguration("MD5", PropertiesBuilder.build(new 
Property("proxy-frontend-database-protocol-type", "openGauss")))), 
"scram_sha256");
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples((YamlAuthorityRuleConfiguration) new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig));
         RepositoryTuple repositoryTuple = actual.iterator().next();
         assertThat(repositoryTuple.getKey(), is("authority"));
         assertThat(repositoryTuple.getValue(), containsString("user: 
root@localhost"));
diff --git 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapper.java
index d3df9406a62..51636de741e 100644
--- 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * Global clock rule configuration repository tuple swapper.
  */
-public final class GlobalClockRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<GlobalClockRuleConfiguration> {
+public final class GlobalClockRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<GlobalClockRuleConfiguration, 
YamlGlobalClockRuleConfiguration> {
     
     private final YamlGlobalClockRuleConfigurationSwapper ruleConfigSwapper = 
new YamlGlobalClockRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlGlobalClockRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
GlobalClockRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/global-clock/core/src/test/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/global-clock/core/src/test/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapperTest.java
index b99dc673f5d..ed0d72a6c73 100644
--- 
a/kernel/global-clock/core/src/test/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/global-clock/core/src/test/java/org/apache/shardingsphere/globalclock/core/yaml/swapper/GlobalClockRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,12 +17,11 @@
 
 package org.apache.shardingsphere.globalclock.core.yaml.swapper;
 
-import 
org.apache.shardingsphere.globalclock.api.config.GlobalClockRuleConfiguration;
+import 
org.apache.shardingsphere.globalclock.core.yaml.config.YamlGlobalClockRuleConfiguration;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collection;
-import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -33,7 +32,7 @@ class GlobalClockRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(new GlobalClockRuleConfiguration("", "", false, 
new Properties()));
+        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(new YamlGlobalClockRuleConfiguration());
         assertThat(actual.iterator().next().getKey(), is("global_clock"));
     }
 }
diff --git 
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapper.java
index 264fea59d48..a9869a8f392 100644
--- 
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * Logging rule configuration repository tuple swapper.
  */
-public final class LoggingRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<LoggingRuleConfiguration> {
+public final class LoggingRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<LoggingRuleConfiguration, YamlLoggingRuleConfiguration> {
     
     private final YamlLoggingRuleConfigurationSwapper ruleConfigSwapper = new 
YamlLoggingRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlLoggingRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
LoggingRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapperTest.java
index 22d4a7dbe88..08b0edfef53 100644
--- 
a/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/logging/core/src/test/java/org/apache/shardingsphere/logging/yaml/swapper/LoggingRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,7 +17,9 @@
 
 package org.apache.shardingsphere.logging.yaml.swapper;
 
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.logging.rule.builder.DefaultLoggingRuleConfigurationBuilder;
+import 
org.apache.shardingsphere.logging.yaml.config.YamlLoggingRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -29,6 +31,8 @@ class LoggingRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        assertThat(swapper.swapToRepositoryTuples(new 
DefaultLoggingRuleConfigurationBuilder().build()).iterator().next().getKey(), 
is("logging"));
+        YamlLoggingRuleConfiguration yamlRuleConfig = 
(YamlLoggingRuleConfiguration) new YamlRuleConfigurationSwapperEngine()
+                .swapToYamlRuleConfiguration(new 
DefaultLoggingRuleConfigurationBuilder().build());
+        
assertThat(swapper.swapToRepositoryTuples(yamlRuleConfig).iterator().next().getKey(),
 is("logging"));
     }
 }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
index 9df73a2c47c..24a2e4dd915 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/database/rule/DatabaseRulePersistService.java
@@ -22,12 +22,13 @@ import 
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
-import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
-import 
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTupleSwapperEngine;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import 
org.apache.shardingsphere.metadata.persist.node.metadata.DatabaseRuleMetaDataNode;
 import 
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTuplePersistService;
+import 
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTupleSwapperEngine;
 import 
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
+import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -54,8 +55,9 @@ public final class DatabaseRulePersistService implements 
DatabaseBasedPersistSer
     @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public void persist(final String databaseName, final 
Collection<RuleConfiguration> configs) {
+        YamlRuleConfigurationSwapperEngine yamlSwapperEngine = new 
YamlRuleConfigurationSwapperEngine();
         for (Entry<RuleConfiguration, RepositoryTupleSwapper> entry : 
OrderedSPILoader.getServices(RepositoryTupleSwapper.class, configs).entrySet()) 
{
-            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(entry.getKey());
+            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(yamlSwapperEngine.swapToYamlRuleConfiguration(entry.getKey()));
             if (!repositoryTuples.isEmpty()) {
                 persistDataNodes(databaseName, 
entry.getValue().getRuleTagName().toLowerCase(), repositoryTuples);
             }
@@ -76,8 +78,9 @@ public final class DatabaseRulePersistService implements 
DatabaseBasedPersistSer
     @Override
     public Collection<MetaDataVersion> persistConfigurations(final String 
databaseName, final Collection<RuleConfiguration> configs) {
         Collection<MetaDataVersion> result = new LinkedList<>();
+        YamlRuleConfigurationSwapperEngine yamlSwapperEngine = new 
YamlRuleConfigurationSwapperEngine();
         for (Entry<RuleConfiguration, RepositoryTupleSwapper> entry : 
OrderedSPILoader.getServices(RepositoryTupleSwapper.class, configs).entrySet()) 
{
-            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(entry.getKey());
+            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(yamlSwapperEngine.swapToYamlRuleConfiguration(entry.getKey()));
             if (!repositoryTuples.isEmpty()) {
                 result.addAll(persistDataNodes(databaseName, 
entry.getValue().getRuleTagName().toLowerCase(), repositoryTuples));
             }
@@ -103,8 +106,9 @@ public final class DatabaseRulePersistService implements 
DatabaseBasedPersistSer
     @Override
     public Collection<MetaDataVersion> deleteConfigurations(final String 
databaseName, final Collection<RuleConfiguration> configs) {
         Collection<MetaDataVersion> result = new LinkedList<>();
+        YamlRuleConfigurationSwapperEngine yamlSwapperEngine = new 
YamlRuleConfigurationSwapperEngine();
         for (Entry<RuleConfiguration, RepositoryTupleSwapper> entry : 
OrderedSPILoader.getServices(RepositoryTupleSwapper.class, configs).entrySet()) 
{
-            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(entry.getKey());
+            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(yamlSwapperEngine.swapToYamlRuleConfiguration(entry.getKey()));
             if (repositoryTuples.isEmpty()) {
                 continue;
             }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
index a8dd687d47f..402b416e7e9 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 import 
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTupleSwapperEngine;
 import org.apache.shardingsphere.metadata.persist.node.GlobalNode;
@@ -58,8 +59,9 @@ public final class GlobalRulePersistService implements 
GlobalPersistService<Coll
     @Override
     public void persist(final Collection<RuleConfiguration> globalRuleConfigs) 
{
         Collection<MetaDataVersion> metaDataVersions = new LinkedList<>();
+        YamlRuleConfigurationSwapperEngine yamlSwapperEngine = new 
YamlRuleConfigurationSwapperEngine();
         for (Entry<RuleConfiguration, RepositoryTupleSwapper> entry : 
OrderedSPILoader.getServices(RepositoryTupleSwapper.class, 
globalRuleConfigs).entrySet()) {
-            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(entry.getKey());
+            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(yamlSwapperEngine.swapToYamlRuleConfiguration(entry.getKey()));
             if (!repositoryTuples.isEmpty()) {
                 metaDataVersions.addAll(persistTuples(repositoryTuples));
             }
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapper.java
index 9d6025d0746..662b4c8bdb5 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapper.java
@@ -34,12 +34,17 @@ import java.util.stream.Collectors;
 /**
  * Single rule configuration repository tuple swapper.
  */
-public final class SingleRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<SingleRuleConfiguration> {
+public final class SingleRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<SingleRuleConfiguration, YamlSingleRuleConfiguration> {
     
     private final YamlSingleRuleConfigurationSwapper ruleConfigSwapper = new 
YamlSingleRuleConfigurationSwapper();
     
     private final RuleNodePath singleRuleNodePath = new 
SingleRuleNodePathProvider().getRuleNodePath();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlSingleRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(SingleRuleNodePathProvider.TABLES, 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
SingleRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(SingleRuleNodePathProvider.TABLES, 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapperTest.java
index ca841dd8a76..702a4b1084c 100644
--- 
a/kernel/single/core/src/test/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/single/core/src/test/java/org/apache/shardingsphere/single/yaml/config/swapper/SingleRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.single.yaml.config.swapper;
 
-import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
+import 
org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -29,6 +29,6 @@ class SingleRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        assertThat(swapper.swapToRepositoryTuples(new 
SingleRuleConfiguration()).iterator().next().getKey(), is("tables"));
+        assertThat(swapper.swapToRepositoryTuples(new 
YamlSingleRuleConfiguration()).iterator().next().getKey(), is("tables"));
     }
 }
diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapper.java
index ec39abf7f40..c910fc5ac64 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * SQL federation rule configuration repository tuple swapper.
  */
-public final class SQLFederationRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<SQLFederationRuleConfiguration> {
+public final class SQLFederationRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<SQLFederationRuleConfiguration, 
YamlSQLFederationRuleConfiguration> {
     
     private final YamlSQLFederationRuleConfigurationSwapper ruleConfigSwapper 
= new YamlSQLFederationRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlSQLFederationRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
SQLFederationRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapperTest.java
index 064491d3b73..79e208434f5 100644
--- 
a/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/yaml/swapper/SQLFederationRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,8 +17,7 @@
 
 package org.apache.shardingsphere.sqlfederation.yaml.swapper;
 
-import org.apache.shardingsphere.sql.parser.api.CacheOption;
-import 
org.apache.shardingsphere.sqlfederation.api.config.SQLFederationRuleConfiguration;
+import 
org.apache.shardingsphere.sqlfederation.yaml.config.YamlSQLFederationRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -30,6 +29,6 @@ class 
SQLFederationRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        assertThat(swapper.swapToRepositoryTuples(new 
SQLFederationRuleConfiguration(false, false, new CacheOption(0, 
0))).iterator().next().getKey(), is("sql_federation"));
+        assertThat(swapper.swapToRepositoryTuples(new 
YamlSQLFederationRuleConfiguration()).iterator().next().getKey(), 
is("sql_federation"));
     }
 }
diff --git 
a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapper.java
index e83ee0803e7..892a977617d 100644
--- 
a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * SQL parser rule configuration repository tuple swapper.
  */
-public final class SQLParserRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<SQLParserRuleConfiguration> {
+public final class SQLParserRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<SQLParserRuleConfiguration, 
YamlSQLParserRuleConfiguration> {
     
     private final YamlSQLParserRuleConfigurationSwapper ruleConfigSwapper = 
new YamlSQLParserRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlSQLParserRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
SQLParserRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/sql-parser/core/src/test/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/sql-parser/core/src/test/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapperTest.java
index 5dcf75d1d9e..563170e8a84 100644
--- 
a/kernel/sql-parser/core/src/test/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/sql-parser/core/src/test/java/org/apache/shardingsphere/parser/yaml/swapper/SQLParserRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,8 +17,7 @@
 
 package org.apache.shardingsphere.parser.yaml.swapper;
 
-import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
-import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
+import 
org.apache.shardingsphere.parser.yaml.config.YamlSQLParserRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -30,7 +29,6 @@ class SQLParserRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        assertThat(swapper.swapToRepositoryTuples(new 
SQLParserRuleConfiguration(DefaultSQLParserRuleConfigurationBuilder.PARSE_TREE_CACHE_OPTION,
-                
DefaultSQLParserRuleConfigurationBuilder.SQL_STATEMENT_CACHE_OPTION)).iterator().next().getKey(),
 is("sql_parser"));
+        assertThat(swapper.swapToRepositoryTuples(new 
YamlSQLParserRuleConfiguration()).iterator().next().getKey(), is("sql_parser"));
     }
 }
diff --git 
a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapper.java
index e0fcf6a8856..50d9ff4ecc6 100644
--- 
a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * SQL translator rule configuration repository tuple swapper.
  */
-public final class SQLTranslatorRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<SQLTranslatorRuleConfiguration> {
+public final class SQLTranslatorRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<SQLTranslatorRuleConfiguration, 
YamlSQLTranslatorRuleConfiguration> {
     
     private final YamlSQLTranslatorRuleConfigurationSwapper ruleConfigSwapper 
= new YamlSQLTranslatorRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlSQLTranslatorRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
SQLTranslatorRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapperTest.java
index fb866849c80..1dc963ac9d6 100644
--- 
a/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/sql-translator/core/src/test/java/org/apache/shardingsphere/sqltranslator/yaml/swapper/SQLTranslatorRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.sqltranslator.yaml.swapper;
 
-import 
org.apache.shardingsphere.sqltranslator.rule.builder.DefaultSQLTranslatorRuleConfigurationBuilder;
+import 
org.apache.shardingsphere.sqltranslator.yaml.config.YamlSQLTranslatorRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -29,6 +29,6 @@ class 
SQLTranslatorRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        assertThat(swapper.swapToRepositoryTuples(new 
DefaultSQLTranslatorRuleConfigurationBuilder().build()).iterator().next().getKey(),
 is("sql_translator"));
+        assertThat(swapper.swapToRepositoryTuples(new 
YamlSQLTranslatorRuleConfiguration()).iterator().next().getKey(), 
is("sql_translator"));
     }
 }
diff --git 
a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapper.java
index 1d5a6dd1a34..0a5c4f8df78 100644
--- 
a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * Traffic rule configuration repository tuple swapper.
  */
-public final class TrafficRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<TrafficRuleConfiguration> {
+public final class TrafficRuleConfigurationRepositoryTupleSwapper implements 
RepositoryTupleSwapper<TrafficRuleConfiguration, YamlTrafficRuleConfiguration> {
     
     private final YamlTrafficRuleConfigurationSwapper ruleConfigSwapper = new 
YamlTrafficRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlTrafficRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
TrafficRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapperTest.java
index 78d4c39f464..24679161eae 100644
--- 
a/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/traffic/core/src/test/java/org/apache/shardingsphere/traffic/yaml/swapper/TrafficRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.traffic.yaml.swapper;
 
-import org.apache.shardingsphere.traffic.api.config.TrafficRuleConfiguration;
+import 
org.apache.shardingsphere.traffic.yaml.config.YamlTrafficRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -29,6 +29,6 @@ class TrafficRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        assertThat(swapper.swapToRepositoryTuples(new 
TrafficRuleConfiguration()).iterator().next().getKey(), is("traffic"));
+        assertThat(swapper.swapToRepositoryTuples(new 
YamlTrafficRuleConfiguration()).iterator().next().getKey(), is("traffic"));
     }
 }
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapper.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapper.java
index 0745afda4ca..7c8fd093707 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapper.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapper.java
@@ -32,10 +32,15 @@ import java.util.Optional;
 /**
  * Transaction rule configuration repository tuple swapper.
  */
-public final class TransactionRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<TransactionRuleConfiguration> {
+public final class TransactionRuleConfigurationRepositoryTupleSwapper 
implements RepositoryTupleSwapper<TransactionRuleConfiguration, 
YamlTransactionRuleConfiguration> {
     
     private final YamlTransactionRuleConfigurationSwapper ruleConfigSwapper = 
new YamlTransactionRuleConfigurationSwapper();
     
+    @Override
+    public Collection<RepositoryTuple> swapToRepositoryTuples(final 
YamlTransactionRuleConfiguration yamlRuleConfig) {
+        return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(yamlRuleConfig)));
+    }
+    
     @Override
     public Collection<RepositoryTuple> swapToRepositoryTuples(final 
TransactionRuleConfiguration data) {
         return Collections.singleton(new 
RepositoryTuple(getRuleTagName().toLowerCase(), 
YamlEngine.marshal(ruleConfigSwapper.swapToYamlConfiguration(data))));
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapperTest.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapperTest.java
index 7e77eac618f..a58f47c1166 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapperTest.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/yaml/swapper/TransactionRuleConfigurationRepositoryTupleSwapperTest.java
@@ -17,13 +17,9 @@
 
 package org.apache.shardingsphere.transaction.yaml.swapper;
 
-import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
-import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
+import 
org.apache.shardingsphere.transaction.yaml.config.YamlTransactionRuleConfiguration;
 import org.junit.jupiter.api.Test;
 
-import java.util.Collection;
-import java.util.Properties;
-
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
@@ -33,7 +29,6 @@ class TransactionRuleConfigurationRepositoryTupleSwapperTest {
     
     @Test
     void assertSwapToRepositoryTuples() {
-        Collection<RepositoryTuple> actual = 
swapper.swapToRepositoryTuples(new TransactionRuleConfiguration("", "", new 
Properties()));
-        assertThat(actual.iterator().next().getKey(), is("transaction"));
+        assertThat(swapper.swapToRepositoryTuples(new 
YamlTransactionRuleConfiguration()).iterator().next().getKey(), 
is("transaction"));
     }
 }
diff --git 
a/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RepositoryTupleSwapper.java
 
b/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RepositoryTupleSwapper.java
index 72ef85cdf20..3743794ad69 100644
--- 
a/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RepositoryTupleSwapper.java
+++ 
b/mode/api/src/main/java/org/apache/shardingsphere/mode/spi/RepositoryTupleSwapper.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPI;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
+import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
 
 import java.util.Collection;
 import java.util.Optional;
@@ -29,9 +30,18 @@ import java.util.Optional;
  * Repository tuple swapper.
  *
  * @param <T> type of swapped object
+ * @param <Y> type of swapped YAML rule configuration
  */
 @SingletonSPI
-public interface RepositoryTupleSwapper<T extends RuleConfiguration> extends 
OrderedSPI<T> {
+public interface RepositoryTupleSwapper<T extends RuleConfiguration, Y extends 
YamlRuleConfiguration> extends OrderedSPI<T> {
+    
+    /**
+     * Swap to repository tuples.
+     *
+     * @param yamlRuleConfig YAML rule configuration to be swapped
+     * @return repository tuples
+     */
+    Collection<RepositoryTuple> swapToRepositoryTuples(Y yamlRuleConfig);
     
     /**
     * Swap to repository tuples.

Reply via email to