You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by to...@apache.org on 2024/05/04 15:34:09 UTC

(shardingsphere) branch master updated: Remove usage of RepositoryTupleSwapper.getRuleTypeName() (#31113)

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

totalo 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 3723c357ea8 Remove usage of RepositoryTupleSwapper.getRuleTypeName() (#31113)
3723c357ea8 is described below

commit 3723c357ea8fa69721b4c6810ac88b6e3f4e3af8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat May 4 23:34:02 2024 +0800

    Remove usage of RepositoryTupleSwapper.getRuleTypeName() (#31113)
---
 .../yaml/config/YamlBroadcastRuleConfiguration.java         |  2 +-
 .../encrypt/yaml/config/YamlEncryptRuleConfiguration.java   |  2 +-
 .../mask/yaml/config/YamlMaskRuleConfiguration.java         |  2 +-
 .../config/YamlReadwriteSplittingRuleConfiguration.java     |  2 +-
 .../shadow/yaml/config/YamlShadowRuleConfiguration.java     |  2 +-
 .../sharding/yaml/config/YamlShardingRuleConfiguration.java |  2 +-
 .../config/pojo/rule/annotation/RepositoryTupleEntity.java  |  7 +++++++
 .../rule/engine/database/type/DropDatabaseRuleOperator.java |  7 +++++--
 .../yaml/config/YamlAuthorityRuleConfiguration.java         |  2 +-
 .../yaml/config/YamlGlobalClockRuleConfiguration.java       |  2 +-
 .../logging/yaml/config/YamlLoggingRuleConfiguration.java   |  2 +-
 .../service/config/RepositoryTupleSwapperEngine.java        |  4 +++-
 .../config/database/rule/DatabaseRulePersistService.java    |  8 +++++---
 .../yaml/config/pojo/YamlSingleRuleConfiguration.java       |  2 +-
 .../yaml/config/YamlSQLFederationRuleConfiguration.java     |  2 +-
 .../parser/yaml/config/YamlSQLParserRuleConfiguration.java  |  2 +-
 .../yaml/config/YamlSQLTranslatorRuleConfiguration.java     |  2 +-
 .../traffic/yaml/config/YamlTrafficRuleConfiguration.java   |  2 +-
 .../yaml/config/YamlTransactionRuleConfiguration.java       |  2 +-
 .../mode/manager/context/ConfigurationContextManager.java   |  8 +++-----
 .../test/it/yaml/RepositoryTupleSwapperIT.java              | 13 ++++++++-----
 21 files changed, 46 insertions(+), 31 deletions(-)

diff --git a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/config/YamlBroadcastRuleConfiguration.java b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/config/YamlBroadcastRuleConfiguration.java
index bef67d0a8b1..be63bcf80e6 100644
--- a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/config/YamlBroadcastRuleConfiguration.java
+++ b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/yaml/config/YamlBroadcastRuleConfiguration.java
@@ -32,7 +32,7 @@ import java.util.LinkedList;
 /**
  * Broadcast rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("broadcast")
 @Getter
 @Setter
 public final class YamlBroadcastRuleConfiguration implements YamlRuleConfiguration {
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/YamlEncryptRuleConfiguration.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/YamlEncryptRuleConfiguration.java
index 32d313b1277..afdc4c5a433 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/YamlEncryptRuleConfiguration.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/yaml/config/YamlEncryptRuleConfiguration.java
@@ -33,7 +33,7 @@ import java.util.Map;
 /**
  * Encrypt rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("encrypt")
 @Getter
 @Setter
 public final class YamlEncryptRuleConfiguration implements YamlRuleConfiguration {
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/config/YamlMaskRuleConfiguration.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/config/YamlMaskRuleConfiguration.java
index 89e70dcc9f6..ea105c0d145 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/config/YamlMaskRuleConfiguration.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/yaml/config/YamlMaskRuleConfiguration.java
@@ -33,7 +33,7 @@ import java.util.Map;
 /**
  * Mask rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("mask")
 @Getter
 @Setter
 public final class YamlMaskRuleConfiguration implements YamlRuleConfiguration {
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/YamlReadwriteSplittingRuleConfiguration.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/YamlReadwriteSplittingRuleConfiguration.java
index 2c3b9ac9c80..6b889e74bee 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/YamlReadwriteSplittingRuleConfiguration.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/yaml/config/YamlReadwriteSplittingRuleConfiguration.java
@@ -33,7 +33,7 @@ import java.util.Map;
 /**
  * Readwrite-splitting rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("readwrite_splitting")
 @Getter
 @Setter
 public final class YamlReadwriteSplittingRuleConfiguration implements YamlRuleConfiguration {
diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/config/YamlShadowRuleConfiguration.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/config/YamlShadowRuleConfiguration.java
index 95fa805e904..5dfb0c0a474 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/config/YamlShadowRuleConfiguration.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/yaml/config/YamlShadowRuleConfiguration.java
@@ -34,7 +34,7 @@ import java.util.Map;
 /**
  * Shadow rule configuration.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("shadow")
 @Getter
 @Setter
 public final class YamlShadowRuleConfiguration implements YamlRuleConfiguration {
diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/YamlShardingRuleConfiguration.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/YamlShardingRuleConfiguration.java
index 81ad57c2cc1..6e792ca5ce7 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/YamlShardingRuleConfiguration.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/yaml/config/YamlShardingRuleConfiguration.java
@@ -42,7 +42,7 @@ import java.util.Map;
 /**
  * Sharding rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("sharding")
 @Getter
 @Setter
 public final class YamlShardingRuleConfiguration implements YamlRuleConfiguration {
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/pojo/rule/annotation/RepositoryTupleEntity.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/pojo/rule/annotation/RepositoryTupleEntity.java
index 3d45c41a9d7..3575118ac98 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/pojo/rule/annotation/RepositoryTupleEntity.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/yaml/config/pojo/rule/annotation/RepositoryTupleEntity.java
@@ -28,4 +28,11 @@ import java.lang.annotation.Target;
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface RepositoryTupleEntity {
+    
+    /**
+     * Get rule type name.
+     * 
+     * @return rule type name
+     */
+    String value();
 }
diff --git a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
index 9f2eb7d8a4b..9a59766e797 100644
--- a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
+++ b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
@@ -30,12 +30,14 @@ import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.rule.attribute.datasource.StaticDataSourceRuleAttribute;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.pojo.rule.annotation.RepositoryTupleEntity;
 import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Objects;
 
 /**
  * Drop database rule operator.
@@ -67,7 +69,8 @@ public final class DropDatabaseRuleOperator implements DatabaseRuleOperator {
         if (null != toBeAlteredRuleConfig && ((DatabaseRuleConfiguration) toBeAlteredRuleConfig).isEmpty()) {
             YamlRuleConfiguration yamlRuleConfig = new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(currentRuleConfig);
             OrderedSPILoader.getServices(RepositoryTupleSwapper.class, Collections.singleton(yamlRuleConfig)).values().stream().findFirst()
-                    .ifPresent(optional -> modeContextManager.removeRuleConfiguration(database.getName(), optional.getRuleTypeName()));
+                    .ifPresent(optional -> modeContextManager.removeRuleConfiguration(database.getName(),
+                            Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value()));
             return Collections.emptyList();
         }
         return modeContextManager.alterRuleConfiguration(database.getName(), toBeAlteredRuleConfig);
diff --git a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/config/YamlAuthorityRuleConfiguration.java b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/config/YamlAuthorityRuleConfiguration.java
index ff83334dff7..f3afe30e226 100644
--- a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/config/YamlAuthorityRuleConfiguration.java
+++ b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/yaml/config/YamlAuthorityRuleConfiguration.java
@@ -33,7 +33,7 @@ import java.util.Map;
 /**
  * Authority rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("authority")
 @RepositoryTupleType("authority")
 @Getter
 @Setter
diff --git a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/yaml/config/YamlGlobalClockRuleConfiguration.java b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/yaml/config/YamlGlobalClockRuleConfiguration.java
index dd40944cc28..0cd0c979172 100644
--- a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/yaml/config/YamlGlobalClockRuleConfiguration.java
+++ b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/yaml/config/YamlGlobalClockRuleConfiguration.java
@@ -29,7 +29,7 @@ import java.util.Properties;
 /**
  * Global clock rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("global_clock")
 @RepositoryTupleType("global_clock")
 @Getter
 @Setter
diff --git a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/config/YamlLoggingRuleConfiguration.java b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/config/YamlLoggingRuleConfiguration.java
index 5c2da869dfe..9b93e576983 100644
--- a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/config/YamlLoggingRuleConfiguration.java
+++ b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/yaml/config/YamlLoggingRuleConfiguration.java
@@ -30,7 +30,7 @@ import java.util.LinkedList;
 /**
  * Logging rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("logging")
 @RepositoryTupleType("logging")
 @Getter
 @Setter
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/RepositoryTupleSwapperEngine.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/RepositoryTupleSwapperEngine.java
index ed1d2234735..79ba0dec2ea 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/RepositoryTupleSwapperEngine.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/RepositoryTupleSwapperEngine.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 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.pojo.rule.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.pojo.rule.annotation.RepositoryTupleEntity;
 import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.mode.engine.AutoRepositoryTupleSwapperEngine;
 import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
@@ -28,6 +29,7 @@ import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
+import java.util.Objects;
 import java.util.Optional;
 
 /**
@@ -71,7 +73,7 @@ public final class RepositoryTupleSwapperEngine {
         YamlRuleConfigurationSwapperEngine yamlSwapperEngine = new YamlRuleConfigurationSwapperEngine();
         AutoRepositoryTupleSwapperEngine repositoryTupleSwapperEngine = new AutoRepositoryTupleSwapperEngine();
         for (RepositoryTupleSwapper each : OrderedSPILoader.getServices(RepositoryTupleSwapper.class)) {
-            if (ruleName.equals(each.getRuleTypeName())) {
+            if (ruleName.equals(Objects.requireNonNull((RepositoryTupleEntity) each.getTypeClass().getAnnotation(RepositoryTupleEntity.class)).value())) {
                 Optional<YamlRuleConfiguration> yamlRuleConfig = repositoryTupleSwapperEngine.swapToObject(repositoryTuples, each.getTypeClass());
                 return yamlRuleConfig.map(yamlSwapperEngine::swapToRuleConfiguration);
             }
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 88c8e077a51..53cc1656261 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
@@ -23,6 +23,7 @@ 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.pojo.rule.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.pojo.rule.annotation.RepositoryTupleEntity;
 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;
@@ -37,6 +38,7 @@ import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map.Entry;
+import java.util.Objects;
 
 /**
  * Database rule persist service.
@@ -62,7 +64,7 @@ public final class DatabaseRulePersistService implements DatabaseBasedPersistSer
         for (Entry<YamlRuleConfiguration, RepositoryTupleSwapper> entry : OrderedSPILoader.getServices(RepositoryTupleSwapper.class, yamlRuleConfigs).entrySet()) {
             Collection<RepositoryTuple> repositoryTuples = repositoryTupleSwapperEngine.swapToRepositoryTuples(entry.getKey());
             if (!repositoryTuples.isEmpty()) {
-                persistDataNodes(databaseName, entry.getValue().getRuleTypeName(), repositoryTuples);
+                persistDataNodes(databaseName, Objects.requireNonNull(entry.getKey().getClass().getAnnotation(RepositoryTupleEntity.class)).value(), repositoryTuples);
             }
         }
     }
@@ -86,7 +88,7 @@ public final class DatabaseRulePersistService implements DatabaseBasedPersistSer
         for (Entry<YamlRuleConfiguration, RepositoryTupleSwapper> entry : OrderedSPILoader.getServices(RepositoryTupleSwapper.class, yamlRuleConfigs).entrySet()) {
             Collection<RepositoryTuple> repositoryTuples = repositoryTupleSwapperEngine.swapToRepositoryTuples(entry.getKey());
             if (!repositoryTuples.isEmpty()) {
-                result.addAll(persistDataNodes(databaseName, entry.getValue().getRuleTypeName(), repositoryTuples));
+                result.addAll(persistDataNodes(databaseName, Objects.requireNonNull(entry.getKey().getClass().getAnnotation(RepositoryTupleEntity.class)).value(), repositoryTuples));
             }
         }
         return result;
@@ -119,7 +121,7 @@ public final class DatabaseRulePersistService implements DatabaseBasedPersistSer
             }
             List<RepositoryTuple> newRepositoryTuples = new LinkedList<>(repositoryTuples);
             Collections.reverse(newRepositoryTuples);
-            result.addAll(deleteDataNodes(databaseName, entry.getValue().getRuleTypeName(), newRepositoryTuples));
+            result.addAll(deleteDataNodes(databaseName, Objects.requireNonNull(entry.getKey().getClass().getAnnotation(RepositoryTupleEntity.class)).value(), newRepositoryTuples));
         }
         return result;
     }
diff --git a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
index f358700b0f8..2f5a2d64322 100644
--- a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
+++ b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/yaml/config/pojo/YamlSingleRuleConfiguration.java
@@ -31,7 +31,7 @@ import java.util.LinkedList;
 /**
  * Single rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("single")
 @RepositoryTupleType(SingleRuleNodePathProvider.TABLES)
 @Getter
 @Setter
diff --git a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/config/YamlSQLFederationRuleConfiguration.java b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/config/YamlSQLFederationRuleConfiguration.java
index ec286312c6d..e34fa344e79 100644
--- a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/config/YamlSQLFederationRuleConfiguration.java
+++ b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/yaml/config/YamlSQLFederationRuleConfiguration.java
@@ -27,7 +27,7 @@ import org.apache.shardingsphere.sqlfederation.api.config.SQLFederationRuleConfi
 /**
  * SQL federation rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("sql_federation")
 @RepositoryTupleType("sql_federation")
 @Getter
 @Setter
diff --git a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/config/YamlSQLParserRuleConfiguration.java b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/config/YamlSQLParserRuleConfiguration.java
index 93ff4148cbd..2a5bfe52871 100644
--- a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/config/YamlSQLParserRuleConfiguration.java
+++ b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/yaml/config/YamlSQLParserRuleConfiguration.java
@@ -27,7 +27,7 @@ import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
 /**
  * SQL parser configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("sql_parser")
 @RepositoryTupleType("sql_parser")
 @Getter
 @Setter
diff --git a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
index 12b0ba4f980..4a53e1fca94 100644
--- a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
+++ b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/yaml/config/YamlSQLTranslatorRuleConfiguration.java
@@ -29,7 +29,7 @@ import java.util.Properties;
 /**
  * SQL translator configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("sql_translator")
 @RepositoryTupleType("sql_translator")
 @Getter
 @Setter
diff --git a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/config/YamlTrafficRuleConfiguration.java b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/config/YamlTrafficRuleConfiguration.java
index 9d4aefa7e84..73cb30c7c6c 100644
--- a/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/config/YamlTrafficRuleConfiguration.java
+++ b/kernel/traffic/core/src/main/java/org/apache/shardingsphere/traffic/yaml/config/YamlTrafficRuleConfiguration.java
@@ -31,7 +31,7 @@ import java.util.Map;
 /**
  * Traffic rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("traffic")
 @RepositoryTupleType("traffic")
 @Getter
 @Setter
diff --git a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/config/YamlTransactionRuleConfiguration.java b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/config/YamlTransactionRuleConfiguration.java
index 12251de1785..f75918b4c46 100644
--- a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/config/YamlTransactionRuleConfiguration.java
+++ b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/yaml/config/YamlTransactionRuleConfiguration.java
@@ -29,7 +29,7 @@ import java.util.Properties;
 /**
  * Transaction rule configuration for YAML.
  */
-@RepositoryTupleEntity
+@RepositoryTupleEntity("transaction")
 @RepositoryTupleType("transaction")
 @Getter
 @Setter
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index a5f9aafb6c8..f0f8082e721 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -38,10 +38,9 @@ import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.pojo.rule.annotation.RepositoryTupleEntity;
 import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
 import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
@@ -58,6 +57,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicReference;
@@ -375,12 +375,10 @@ public final class ConfigurationContextManager {
     }
     
     // Optimize string comparison rule type.
-    @SuppressWarnings("rawtypes")
     @SneakyThrows(Exception.class)
     private void closeStaleTransactionRule(final RuleConfiguration ruleConfig) {
         YamlRuleConfiguration yamlRuleConfig = new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig);
-        RepositoryTupleSwapper repositoryTupleSwapper = OrderedSPILoader.getServices(RepositoryTupleSwapper.class, Collections.singleton(yamlRuleConfig)).get(yamlRuleConfig);
-        if (!"transaction".equals(repositoryTupleSwapper.getRuleTypeName())) {
+        if (!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value())) {
             return;
         }
         Optional<TransactionRule> transactionRule = metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class);
diff --git a/test/it/yaml/src/main/java/org/apache/shardingsphere/test/it/yaml/RepositoryTupleSwapperIT.java b/test/it/yaml/src/main/java/org/apache/shardingsphere/test/it/yaml/RepositoryTupleSwapperIT.java
index ea6e3029d2a..843684516f9 100644
--- a/test/it/yaml/src/main/java/org/apache/shardingsphere/test/it/yaml/RepositoryTupleSwapperIT.java
+++ b/test/it/yaml/src/main/java/org/apache/shardingsphere/test/it/yaml/RepositoryTupleSwapperIT.java
@@ -21,8 +21,9 @@ import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.util.yaml.datanode.RepositoryTuple;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
+import org.apache.shardingsphere.infra.yaml.config.pojo.rule.annotation.RepositoryTupleEntity;
 import org.apache.shardingsphere.mode.engine.AutoRepositoryTupleSwapperEngine;
+import org.apache.shardingsphere.mode.spi.RepositoryTupleSwapper;
 import org.junit.jupiter.api.Test;
 
 import java.io.File;
@@ -34,6 +35,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -92,7 +94,8 @@ public abstract class RepositoryTupleSwapperIT {
     private String getActualYamlContent() throws IOException {
         YamlRuleConfiguration yamlRuleConfig = loadYamlRuleConfiguration();
         Collection<RepositoryTuple> repositoryTuples = new AutoRepositoryTupleSwapperEngine().swapToRepositoryTuples(yamlRuleConfig).stream()
-                .map(each -> new RepositoryTuple(getRepositoryTupleKey(each), each.getValue())).collect(Collectors.toList());
+                .map(each -> new RepositoryTuple(getRepositoryTupleKey(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value(), each), each.getValue()))
+                .collect(Collectors.toList());
         AutoRepositoryTupleSwapperEngine repositoryTupleSwapperEngine = new AutoRepositoryTupleSwapperEngine();
         Optional<YamlRuleConfiguration> actualYamlRuleConfig = repositoryTupleSwapperEngine.swapToObject(repositoryTuples, swapper.getTypeClass());
         assertTrue(actualYamlRuleConfig.isPresent());
@@ -101,10 +104,10 @@ public abstract class RepositoryTupleSwapperIT {
         return YamlEngine.marshal(yamlRootConfig);
     }
     
-    private String getRepositoryTupleKey(final RepositoryTuple tuple) {
+    private String getRepositoryTupleKey(final String ruleTypeName, final RepositoryTuple tuple) {
         return isGlobalRule
-                ? String.format("/metadata/rules/%s/versions/0", swapper.getRuleTypeName())
-                : String.format("/metadata/foo_db/rules/%s/%s/versions/0", swapper.getRuleTypeName(), tuple.getKey());
+                ? String.format("/metadata/rules/%s/versions/0", ruleTypeName)
+                : String.format("/metadata/foo_db/rules/%s/%s/versions/0", ruleTypeName, tuple.getKey());
     }
     
     private String getExpectedYamlContent() throws IOException {