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

duanzhengqiang 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 10b8c16  Split RegistryCenter to multiple RegistryServives (#10405)
10b8c16 is described below

commit 10b8c16d8cbf41c00a953989a3bdef18dbb5ce86
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 20 20:54:57 2021 +0800

    Split RegistryCenter to multiple RegistryServives (#10405)
    
    * Refactor RegistryCenter
    
    * Add DataSourceRegistryCenter
    
    * Refactor DataSourceRegistryCenter
    
    * Add SchemaRuleRegistryCenter
    
    * Add GlobalRuleRegistryCenter
    
    * Add GlobalRuleRegistryCenter
    
    * Add GlobalRuleRegistryCenter
    
    * Add service package
    
    * Add SchemaBasedRegistryService
    
    * Refactor DataSourceRegistryCenter
    
    * Refactor GlobalRuleRegistryCenter
    
    * Refactor GlobalRuleRegistryCenter
    
    * Move to impl package
    
    * Rename RegistryService
    
    * Add PropertiesRegistryService
    
    * Fix PropertiesRegistryServiceTest
    
    * Refactor RegistryCenter
---
 .../metadata/GovernanceMetaDataContexts.java       |  14 +-
 .../metadata/GovernanceMetaDataContextsTest.java   |  10 +-
 .../governance/core/lock/GovernanceLock.java       |  16 +-
 .../governance/core/registry/RegistryCenter.java   | 211 ++++----------------
 .../registry/service/GlobalRegistryService.java    |  41 ++++
 .../service/SchemaBasedRegistryService.java        |  59 ++++++
 .../service/impl/DataSourceRegistryService.java    |  81 ++++++++
 .../service/impl/GlobalRuleRegistryService.java    |  59 ++++++
 .../impl/LockRegistryService.java}                 |   8 +-
 .../service/impl/PropertiesRegistryService.java    |  54 ++++++
 .../service/impl/SchemaRuleRegistryService.java    |  81 ++++++++
 .../governance/core/lock/GovernanceLockTest.java   |  16 +-
 .../core/registry/RegistryCenterTest.java          | 212 ---------------------
 .../impl/DataSourceRegistryServiceTest.java        | 132 +++++++++++++
 .../impl/GlobalRuleRegistryServiceTest.java        |  90 +++++++++
 .../impl/LockRegistryServiceTest.java}             |  18 +-
 .../impl/PropertiesRegistryServiceTest.java}       |  43 ++---
 .../impl/SchemaRuleRegistryServiceTest.java        | 149 +++++++++++++++
 .../GovernanceShardingSphereDataSource.java        |   6 +-
 .../impl/GovernanceBootstrapInitializer.java       |  11 +-
 20 files changed, 848 insertions(+), 463 deletions(-)

diff --git 
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
index 4b5f57b..fdad7bd 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-context/src/main/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContexts.java
@@ -330,18 +330,18 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
     
     private ShardingSphereMetaData buildMetaData(final MetaDataPersistedEvent 
event) throws SQLException {
         String schemaName = event.getSchemaName();
-        if 
(!governanceFacade.getRegistryCenter().hasDataSourceConfiguration(schemaName)) {
-            
governanceFacade.getRegistryCenter().persistDataSourceConfigurations(schemaName,
 new LinkedHashMap<>());
+        if 
(!governanceFacade.getRegistryCenter().getDataSourceService().isExisted(schemaName))
 {
+            
governanceFacade.getRegistryCenter().getDataSourceService().persist(schemaName, 
new LinkedHashMap<>());
         }
-        if 
(!governanceFacade.getRegistryCenter().hasRuleConfiguration(schemaName)) {
-            
governanceFacade.getRegistryCenter().persistRuleConfigurations(schemaName, new 
LinkedList<>());
+        if 
(!governanceFacade.getRegistryCenter().getSchemaRuleService().isExisted(schemaName))
 {
+            
governanceFacade.getRegistryCenter().getSchemaRuleService().persist(schemaName, 
new LinkedList<>());
         }
         Map<String, Map<String, DataSource>> dataSourcesMap = 
createDataSourcesMap(Collections.singletonMap(schemaName,
-                
governanceFacade.getRegistryCenter().loadDataSourceConfigurations(schemaName)));
+                
governanceFacade.getRegistryCenter().getDataSourceService().load(schemaName)));
         MetaDataContextsBuilder metaDataContextsBuilder = new 
MetaDataContextsBuilder(dataSourcesMap,
-                Collections.singletonMap(schemaName, 
governanceFacade.getRegistryCenter().loadRuleConfigurations(schemaName)),
+                Collections.singletonMap(schemaName, 
governanceFacade.getRegistryCenter().getSchemaRuleService().load(schemaName)),
                 // TODO load global schema from reg center
-                
governanceFacade.getRegistryCenter().loadGlobalRuleConfigurations(), 
+                
governanceFacade.getRegistryCenter().getGlobalRuleService().load(), 
                 metaDataContexts.getProps().getProps());
         return 
metaDataContextsBuilder.build().getMetaDataMap().get(schemaName);
     }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
 
b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
index 722c31d..b39f9a6 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-context/src/test/java/org/apache/shardingsphere/governance/context/metadata/GovernanceMetaDataContextsTest.java
@@ -18,16 +18,16 @@
 package org.apache.shardingsphere.governance.context.metadata;
 
 import 
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
+import org.apache.shardingsphere.governance.core.facade.GovernanceFacade;
+import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceChangedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataDeletedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataPersistedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.props.PropertiesChangedEvent;
+import 
org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.DisabledStateChangedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.rule.GlobalRuleConfigurationsChangedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsChangedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.schema.SchemaChangedEvent;
-import org.apache.shardingsphere.governance.core.facade.GovernanceFacade;
-import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import 
org.apache.shardingsphere.governance.core.registry.listener.event.readwritesplitting.DisabledStateChangedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchema;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
@@ -81,7 +81,7 @@ public final class GovernanceMetaDataContextsTest {
     @Mock
     private GovernanceFacade governanceFacade;
     
-    @Mock
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private RegistryCenter registryCenter;
     
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -131,7 +131,7 @@ public final class GovernanceMetaDataContextsTest {
     @Test
     public void assertSchemaAdd() throws SQLException {
         MetaDataPersistedEvent event = new 
MetaDataPersistedEvent("schema_add");
-        
when(registryCenter.loadDataSourceConfigurations("schema_add")).thenReturn(getDataSourceConfigurations());
+        
when(registryCenter.getDataSourceService().load("schema_add")).thenReturn(getDataSourceConfigurations());
         governanceMetaDataContexts.renew(event);
         assertNotNull(governanceMetaDataContexts.getMetaData("schema_add"));
         
assertNotNull(governanceMetaDataContexts.getMetaData("schema_add").getResource().getDataSources());
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
index eeadb67..d86b9e5 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/lock/GovernanceLock.java
@@ -56,7 +56,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public boolean tryLock(final String lockName) {
-        return registryCenter.getLock().tryLock(lockName, 
lockTimeoutMilliseconds) && registryCenter.getLock().checkLockAck(lockName);
+        return registryCenter.getLockService().tryLock(lockName, 
lockTimeoutMilliseconds) && 
registryCenter.getLockService().checkLockAck(lockName);
     }
     
     /**
@@ -68,7 +68,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public boolean tryLock(final String lockName, final long 
timeoutMilliseconds) {
-        return registryCenter.getLock().tryLock(lockName, timeoutMilliseconds) 
&& registryCenter.getLock().checkLockAck(lockName);
+        return registryCenter.getLockService().tryLock(lockName, 
timeoutMilliseconds) && registryCenter.getLockService().checkLockAck(lockName);
     }
     
     /**
@@ -78,8 +78,8 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Override
     public void releaseLock(final String lockName) {
-        registryCenter.getLock().releaseLock(lockName);
-        registryCenter.getLock().checkUnlockAck(lockName);
+        registryCenter.getLockService().releaseLock(lockName);
+        registryCenter.getLockService().checkUnlockAck(lockName);
     }
     
     /**
@@ -95,7 +95,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
     
     @Override
     public boolean isReleased(final String lockName) {
-        return registryCenter.getLock().checkUnlockAck(lockName);
+        return registryCenter.getLockService().checkUnlockAck(lockName);
     }
     
     @Override
@@ -122,7 +122,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
     @Subscribe
     public void renew(final LockNotificationEvent event) {
         lockedResources.add(event.getLockName());
-        registryCenter.getLock().ackLock(event.getLockName());
+        registryCenter.getLockService().ackLock(event.getLockName());
     }
     
     /**
@@ -132,7 +132,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
      */
     @Subscribe
     public void renew(final LockReleasedEvent event) {
-        registryCenter.getLock().deleteLockAck(event.getLockName());
+        registryCenter.getLockService().deleteLockAck(event.getLockName());
     }
     
     /**
@@ -148,7 +148,7 @@ public final class GovernanceLock implements 
ShardingSphereLock {
     private void releaseInnerLock(final String lockName) {
         if (lockedResources.contains(lockName)) {
             lockedResources.remove(lockName);
-            registryCenter.getLock().ackUnlock(lockName);
+            registryCenter.getLockService().ackUnlock(lockName);
         }
     }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index 6501c11..78d783e 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -24,9 +24,6 @@ import com.google.common.base.Strings;
 import com.google.common.eventbus.Subscribe;
 import lombok.Getter;
 import 
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
-import 
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationChecker;
-import 
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationCheckerFactory;
 import 
org.apache.shardingsphere.governance.core.registry.instance.GovernanceInstance;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAddedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAlteredEvent;
@@ -41,7 +38,11 @@ import 
org.apache.shardingsphere.governance.core.registry.listener.event.rule.Ru
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.rule.RuleConfigurationsAlteredEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.rule.SwitchRuleConfigurationEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.scaling.StartScalingEvent;
-import 
org.apache.shardingsphere.governance.core.registry.lock.LockRegistryCenter;
+import 
org.apache.shardingsphere.governance.core.registry.service.impl.DataSourceRegistryService;
+import 
org.apache.shardingsphere.governance.core.registry.service.impl.GlobalRuleRegistryService;
+import 
org.apache.shardingsphere.governance.core.registry.service.impl.LockRegistryService;
+import 
org.apache.shardingsphere.governance.core.registry.service.impl.PropertiesRegistryService;
+import 
org.apache.shardingsphere.governance.core.registry.service.impl.SchemaRuleRegistryService;
 import org.apache.shardingsphere.governance.core.yaml.schema.pojo.YamlSchema;
 import 
org.apache.shardingsphere.governance.core.yaml.schema.swapper.SchemaYamlSwapper;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
@@ -62,14 +63,12 @@ import 
org.apache.shardingsphere.infra.metadata.user.ShardingSphereUsers;
 import 
org.apache.shardingsphere.infra.metadata.user.yaml.config.YamlUsersConfigurationConverter;
 import org.apache.shardingsphere.infra.rule.event.impl.DataSourceDisabledEvent;
 import org.apache.shardingsphere.infra.rule.event.impl.PrimaryDataSourceEvent;
-import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.swapper.YamlDataSourceConfigurationSwapper;
 import 
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
@@ -91,29 +90,36 @@ public final class RegistryCenter {
     
     private final RegistryCenterNode node;
     
-    private final LockNode lockNode;
-    
     private final RegistryCacheManager registryCacheManager;
     
     @Getter
-    private final LockRegistryCenter lock;
+    private final DataSourceRegistryService dataSourceService;
+    
+    @Getter
+    private final SchemaRuleRegistryService schemaRuleService;
+    
+    @Getter
+    private final GlobalRuleRegistryService globalRuleService;
+    
+    @Getter
+    private final PropertiesRegistryService propsService;
+    
+    @Getter
+    private final LockRegistryService lockService;
     
     public RegistryCenter(final RegistryCenterRepository repository) {
         instanceId = GovernanceInstance.getInstance().getId();
         this.repository = repository;
         node = new RegistryCenterNode();
-        lockNode = new LockNode();
-        initLockNode();
         registryCacheManager = new RegistryCacheManager(repository, node);
-        lock = new LockRegistryCenter(repository);
+        dataSourceService = new DataSourceRegistryService(repository);
+        schemaRuleService = new SchemaRuleRegistryService(repository);
+        globalRuleService = new GlobalRuleRegistryService(repository);
+        propsService = new PropertiesRegistryService(repository);
+        lockService = new LockRegistryService(repository);
         ShardingSphereEventBus.getInstance().register(this);
     }
     
-    private void initLockNode() {
-        repository.persist(lockNode.getLockRootNodePath(), "");
-        repository.persist(lockNode.getLockedAckRootNodePah(), "");
-    }
-    
     /**
      * Persist rule configuration.
      *
@@ -124,44 +130,12 @@ public final class RegistryCenter {
      */
     public void persistConfigurations(final String schemaName, 
                                       final Map<String, 
DataSourceConfiguration> dataSourceConfigs, final Collection<RuleConfiguration> 
ruleConfigs, final boolean isOverwrite) {
-        persistDataSourceConfigurations(schemaName, dataSourceConfigs, 
isOverwrite);
-        persistRuleConfigurations(schemaName, ruleConfigs, isOverwrite);
+        dataSourceService.persist(schemaName, dataSourceConfigs, isOverwrite);
+        schemaRuleService.persist(schemaName, ruleConfigs, isOverwrite);
         // TODO Consider removing the following one.
         persistSchemaName(schemaName);
     }
     
-    private void persistDataSourceConfigurations(final String schemaName, 
final Map<String, DataSourceConfiguration> dataSourceConfigs, final boolean 
isOverwrite) {
-        if (!dataSourceConfigs.isEmpty() && (isOverwrite || 
!hasDataSourceConfiguration(schemaName))) {
-            persistDataSourceConfigurations(schemaName, dataSourceConfigs);
-        }
-    }
-    
-    /**
-     * Persist data source configurations.
-     *
-     * @param schemaName schema name
-     * @param dataSourceConfigs data source configurations
-     */
-    public void persistDataSourceConfigurations(final String schemaName, final 
Map<String, DataSourceConfiguration> dataSourceConfigs) {
-        repository.persist(node.getMetadataDataSourcePath(schemaName), 
YamlEngine.marshal(createYamlDataSourceConfiguration(dataSourceConfigs)));
-    }
-    
-    private void persistRuleConfigurations(final String schemaName, final 
Collection<RuleConfiguration> ruleConfigs, final boolean isOverwrite) {
-        if (!ruleConfigs.isEmpty() && (isOverwrite || 
!hasRuleConfiguration(schemaName))) {
-            persistRuleConfigurations(schemaName, ruleConfigs);
-        }
-    }
-    
-    /**
-     * Persist rule configurations.
-     *
-     * @param schemaName schema name
-     * @param ruleConfigs rule configurations
-     */
-    public void persistRuleConfigurations(final String schemaName, final 
Collection<RuleConfiguration> ruleConfigs) {
-        repository.persist(node.getRulePath(schemaName), 
YamlEngine.marshal(createYamlRuleConfigurations(schemaName, ruleConfigs)));
-    }
-    
     /**
      * Persist global configuration.
      *
@@ -170,20 +144,8 @@ public final class RegistryCenter {
      * @param isOverwrite is overwrite config center's configuration
      */
     public void persistGlobalConfiguration(final Collection<RuleConfiguration> 
globalRuleConfigs, final Properties props, final boolean isOverwrite) {
-        persistGlobalRuleConfigurations(globalRuleConfigs, isOverwrite);
-        persistProperties(props, isOverwrite);
-    }
-    
-    private void persistGlobalRuleConfigurations(final 
Collection<RuleConfiguration> globalRuleConfigs, final boolean isOverwrite) {
-        if (!globalRuleConfigs.isEmpty() && (isOverwrite || 
!hasGlobalRuleConfigurations())) {
-            repository.persist(node.getGlobalRuleNode(), 
YamlEngine.marshal(new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
-        }
-    }
-    
-    private void persistProperties(final Properties props, final boolean 
isOverwrite) {
-        if (!props.isEmpty() && (isOverwrite || !hasProperties())) {
-            repository.persist(node.getPropsPath(), YamlEngine.marshal(props));
-        }
+        globalRuleService.persist(globalRuleConfigs, isOverwrite);
+        propsService.persist(props, isOverwrite);
     }
     
     @SuppressWarnings("unchecked")
@@ -193,7 +155,7 @@ public final class RegistryCenter {
     }
     
     private void addDataSourceConfigurations(final String schemaName, final 
Map<String, DataSourceConfiguration> dataSourceConfigs) {
-        Map<String, DataSourceConfiguration> dataSourceConfigMap = 
loadDataSourceConfigurations(schemaName);
+        Map<String, DataSourceConfiguration> dataSourceConfigMap = 
dataSourceService.load(schemaName);
         dataSourceConfigMap.putAll(dataSourceConfigs);
         repository.persist(node.getMetadataDataSourcePath(schemaName), 
YamlEngine.marshal(createYamlDataSourceConfiguration(dataSourceConfigMap)));
     }
@@ -203,32 +165,12 @@ public final class RegistryCenter {
                 .collect(Collectors.toMap(Entry::getKey, entry -> new 
YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue()), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
     }
     
-    private Collection<YamlRuleConfiguration> 
createYamlRuleConfigurations(final String schemaName, final 
Collection<RuleConfiguration> ruleConfigs) {
-        Collection<RuleConfiguration> configs = new LinkedList<>();
-        for (RuleConfiguration each : ruleConfigs) {
-            Optional<RuleConfigurationChecker> checker = 
RuleConfigurationCheckerFactory.newInstance(each);
-            if (checker.isPresent()) {
-                checker.get().check(schemaName, each);
-                configs.add(each);
-            }
-        }
-        return new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
-    }
-    
     private void persistChangedPrivilege(final Collection<ShardingSphereUser> 
users) {
         if (!users.isEmpty()) {
             repository.persist(node.getPrivilegeNodePath(), 
YamlEngine.marshal(YamlUsersConfigurationConverter.convertYamlUserConfigurations(users)));
         }
     }
     
-    private boolean hasGlobalRuleConfigurations() {
-        return 
!Strings.isNullOrEmpty(repository.get(node.getGlobalRuleNode()));
-    }
-    
-    private boolean hasProperties() {
-        return !Strings.isNullOrEmpty(repository.get(node.getPropsPath()));
-    }
-    
     private void persistSchemaName(final String schemaName) {
         String schemaNames = repository.get(node.getMetadataNodePath());
         if (Strings.isNullOrEmpty(schemaNames)) {
@@ -243,59 +185,6 @@ public final class RegistryCenter {
         newArrayList.add(schemaName);
         repository.persist(node.getMetadataNodePath(), 
Joiner.on(",").join(newArrayList));
     }
-
-    /**
-     * Load data source configurations.
-     *
-     * @param schemaName schema name
-     * @return data source configurations
-     */
-    public Map<String, DataSourceConfiguration> 
loadDataSourceConfigurations(final String schemaName) {
-        return hasDataSourceConfiguration(schemaName) ? 
getDataSourceConfigurations(repository.get(node.getMetadataDataSourcePath(schemaName)))
 : new LinkedHashMap<>();
-    }
-    
-    @SuppressWarnings("unchecked")
-    private static Map<String, DataSourceConfiguration> 
getDataSourceConfigurations(final String yamlContent) {
-        Map<String, Map<String, Object>> yamlDataSources = 
YamlEngine.unmarshal(yamlContent, Map.class);
-        if (yamlDataSources.isEmpty()) {
-            return new LinkedHashMap<>();
-        }
-        Map<String, DataSourceConfiguration> result = new 
LinkedHashMap<>(yamlDataSources.size());
-        yamlDataSources.forEach((key, value) -> result.put(key, new 
YamlDataSourceConfigurationSwapper().swapToDataSourceConfiguration(value)));
-        return result;
-    }
-    
-    /**
-     * Load rule configurations.
-     *
-     * @param schemaName schema name
-     * @return rule configurations
-     */
-    @SuppressWarnings("unchecked")
-    public Collection<RuleConfiguration> loadRuleConfigurations(final String 
schemaName) {
-        return hasRuleConfiguration(schemaName)
-                ? new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getRulePath(schemaName)),
 Collection.class)) : new LinkedList<>();
-    }
-    
-    /**
-     * Load global rule configurations.
-     * 
-     * @return global rule configurations
-     */
-    @SuppressWarnings("unchecked")
-    public Collection<RuleConfiguration> loadGlobalRuleConfigurations() {
-        return hasGlobalRuleConfigurations()
-                ? new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getGlobalRuleNode()),
 Collection.class)) : Collections.emptyList();
-    }
-    
-    /**
-     * Load properties configuration.
-     *
-     * @return properties
-     */
-    public Properties loadProperties() {
-        return Strings.isNullOrEmpty(repository.get(node.getPropsPath())) ? 
new Properties() : YamlEngine.unmarshal(repository.get(node.getPropsPath()), 
Properties.class);
-    }
     
     /**
      * Load all schema names.
@@ -308,26 +197,6 @@ public final class RegistryCenter {
     }
     
     /**
-     * Judge whether schema has data source configuration.
-     *
-     * @param schemaName schema name
-     * @return has data source configuration or not
-     */
-    public boolean hasDataSourceConfiguration(final String schemaName) {
-        return 
!Strings.isNullOrEmpty(repository.get(node.getMetadataDataSourcePath(schemaName)));
-    }
-    
-    /**
-     * Judge whether schema has rule configuration.
-     *
-     * @param schemaName schema name
-     * @return has rule configuration or not
-     */
-    public boolean hasRuleConfiguration(final String schemaName) {
-        return 
!Strings.isNullOrEmpty(repository.get(node.getRulePath(schemaName)));
-    }
-    
-    /**
      * Persist ShardingSphere schema.
      *
      * @param schemaName schema name
@@ -398,7 +267,7 @@ public final class RegistryCenter {
      */
     @Subscribe
     public synchronized void renew(final DataSourceAlteredEvent event) {
-        persistDataSourceConfigurations(event.getSchemaName(), 
event.getDataSourceConfigurations());
+        dataSourceService.persist(event.getSchemaName(), 
event.getDataSourceConfigurations());
     }
     
     /**
@@ -408,8 +277,7 @@ public final class RegistryCenter {
      */
     @Subscribe
     public synchronized void renew(final RuleConfigurationsAlteredEvent event) 
{
-        //TODO
-        persistRuleConfigurations(event.getSchemaName(), 
event.getRuleConfigurations());
+        schemaRuleService.persist(event.getSchemaName(), 
event.getRuleConfigurations());
     }
     
     /**
@@ -459,7 +327,7 @@ public final class RegistryCenter {
      */
     @Subscribe
     public synchronized void renew(final SwitchRuleConfigurationEvent event) {
-        persistRuleConfigurations(event.getSchemaName(), 
loadCachedRuleConfigurations(event.getSchemaName(), 
event.getRuleConfigurationCacheId()));
+        schemaRuleService.persist(event.getSchemaName(), 
loadCachedRuleConfigurations(event.getSchemaName(), 
event.getRuleConfigurationCacheId()));
         
registryCacheManager.deleteCache(node.getRulePath(event.getSchemaName()), 
event.getRuleConfigurationCacheId());
     }
     
@@ -478,18 +346,18 @@ public final class RegistryCenter {
     }
     
     /**
-     * User configuration event.
+     * Renew create user statement.
      *
-     * @param event user configuration event
+     * @param event create user statement event
      */
     @Subscribe
     public synchronized void renew(final CreateUserStatementEvent event) {
-        Collection<RuleConfiguration> globalRuleConfigs = 
loadGlobalRuleConfigurations();
+        Collection<RuleConfiguration> globalRuleConfigs = 
globalRuleService.load();
         Optional<AuthorityRuleConfiguration> authorityRuleConfig = 
globalRuleConfigs.stream().filter(each -> each instanceof 
AuthorityRuleConfiguration)
                 .findAny().map(each -> (AuthorityRuleConfiguration) each);
         Preconditions.checkState(authorityRuleConfig.isPresent());
         refreshAuthorityRuleConfiguration(authorityRuleConfig.get(), 
event.getUsers());
-        persistGlobalRuleConfigurations(globalRuleConfigs, true);
+        globalRuleService.persist(globalRuleConfigs, true);
     }
     
     /**
@@ -621,15 +489,6 @@ public final class RegistryCenter {
     }
     
     /**
-     * Load all instances.
-     *
-     * @return collection of all instances
-     */
-    public Collection<String> loadAllInstances() {
-        return repository.getChildrenKeys(node.getProxyNodesPath());
-    }
-    
-    /**
      * Load disabled data sources.
      * 
      * @param schemaName schema name
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/GlobalRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/GlobalRegistryService.java
new file mode 100644
index 0000000..0cfc83b
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/GlobalRegistryService.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service;
+
+/**
+ * Global registry service.
+ * 
+ * @param <T> type of configuration
+ */
+public interface GlobalRegistryService<T> {
+    
+    /**
+     * Persist configurations.
+     *
+     * @param globalRuleConfigs configurations
+     * @param isOverwrite is overwrite
+     */
+    void persist(T globalRuleConfigs, boolean isOverwrite);
+    
+    /**
+     * Load configurations.
+     *
+     * @return configurations
+     */
+    T load();
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/SchemaBasedRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/SchemaBasedRegistryService.java
new file mode 100644
index 0000000..efa53f8
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/SchemaBasedRegistryService.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service;
+
+/**
+ * Schema based registry service.
+ * 
+ * @param <T> type of configuration
+ */
+public interface SchemaBasedRegistryService<T> {
+    
+    /**
+     * Persist configurations.
+     *
+     * @param schemaName schema name
+     * @param configs configurations
+     * @param isOverwrite is overwrite
+     */
+    void persist(String schemaName, T configs, boolean isOverwrite);
+    
+    /**
+     * Persist configurations.
+     *
+     * @param schemaName schema name
+     * @param configs configurations
+     */
+    void persist(String schemaName, T configs);
+    
+    /**
+     * Load configurations.
+     *
+     * @param schemaName schema name
+     * @return configurations
+     */
+    T load(String schemaName);
+    
+    /**
+     * Judge whether schema configuration existed.
+     *
+     * @param schemaName schema name
+     * @return configuration existed or not
+     */
+    boolean isExisted(String schemaName);
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryService.java
new file mode 100644
index 0000000..dc8b01f
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryService.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
+import 
org.apache.shardingsphere.governance.core.registry.service.SchemaBasedRegistryService;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import 
org.apache.shardingsphere.infra.yaml.swapper.YamlDataSourceConfigurationSwapper;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
+/**
+ * Data source registry service.
+ */
+@RequiredArgsConstructor
+public final class DataSourceRegistryService implements 
SchemaBasedRegistryService<Map<String, DataSourceConfiguration>> {
+    
+    private final RegistryCenterRepository repository;
+    
+    private final RegistryCenterNode node = new RegistryCenterNode();
+    
+    @Override
+    public void persist(final String schemaName, final Map<String, 
DataSourceConfiguration> dataSourceConfigs, final boolean isOverwrite) {
+        if (!dataSourceConfigs.isEmpty() && (isOverwrite || 
!isExisted(schemaName))) {
+            persist(schemaName, dataSourceConfigs);
+        }
+    }
+    
+    @Override
+    public void persist(final String schemaName, final Map<String, 
DataSourceConfiguration> dataSourceConfigs) {
+        repository.persist(node.getMetadataDataSourcePath(schemaName), 
YamlEngine.marshal(createYamlDataSourceConfiguration(dataSourceConfigs)));
+    }
+    
+    private Map<String, Map<String, Object>> 
createYamlDataSourceConfiguration(final Map<String, DataSourceConfiguration> 
dataSourceConfigs) {
+        return dataSourceConfigs.entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> new 
YamlDataSourceConfigurationSwapper().swapToMap(entry.getValue()), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
+    }
+    
+    @Override
+    public Map<String, DataSourceConfiguration> load(final String schemaName) {
+        return isExisted(schemaName) ? 
getDataSourceConfigurations(repository.get(node.getMetadataDataSourcePath(schemaName)))
 : new LinkedHashMap<>();
+    }
+    
+    @SuppressWarnings("unchecked")
+    private static Map<String, DataSourceConfiguration> 
getDataSourceConfigurations(final String yamlContent) {
+        Map<String, Map<String, Object>> yamlDataSources = 
YamlEngine.unmarshal(yamlContent, Map.class);
+        if (yamlDataSources.isEmpty()) {
+            return new LinkedHashMap<>();
+        }
+        Map<String, DataSourceConfiguration> result = new 
LinkedHashMap<>(yamlDataSources.size());
+        yamlDataSources.forEach((key, value) -> result.put(key, new 
YamlDataSourceConfigurationSwapper().swapToDataSourceConfiguration(value)));
+        return result;
+    }
+    
+    @Override
+    public boolean isExisted(final String schemaName) {
+        return 
!Strings.isNullOrEmpty(repository.get(node.getMetadataDataSourcePath(schemaName)));
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryService.java
new file mode 100644
index 0000000..5099db8
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryService.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
+import 
org.apache.shardingsphere.governance.core.registry.service.GlobalRegistryService;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import 
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Global rule registry service.
+ */
+@RequiredArgsConstructor
+public final class GlobalRuleRegistryService implements 
GlobalRegistryService<Collection<RuleConfiguration>> {
+    
+    private final RegistryCenterRepository repository;
+    
+    private final RegistryCenterNode node = new RegistryCenterNode();
+    
+    @Override
+    public void persist(final Collection<RuleConfiguration> globalRuleConfigs, 
final boolean isOverwrite) {
+        if (!globalRuleConfigs.isEmpty() && (isOverwrite || !isExisted())) {
+            repository.persist(node.getGlobalRuleNode(), 
YamlEngine.marshal(new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(globalRuleConfigs)));
+        }
+    }
+    
+    @Override
+    @SuppressWarnings("unchecked")
+    public Collection<RuleConfiguration> load() {
+        return isExisted()
+                ? new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getGlobalRuleNode()),
 Collection.class)) : Collections.emptyList();
+    }
+    
+    private boolean isExisted() {
+        return 
!Strings.isNullOrEmpty(repository.get(node.getGlobalRuleNode()));
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenter.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryService.java
similarity index 95%
rename from 
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenter.java
rename to 
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryService.java
index 6864c49..fd78b39 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenter.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.registry.lock;
+package org.apache.shardingsphere.governance.core.registry.service.impl;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Strings;
@@ -29,9 +29,9 @@ import java.util.Collection;
 import java.util.concurrent.TimeUnit;
 
 /**
- * Lock registry center.
+ * Lock registry service.
  */
-public final class LockRegistryCenter {
+public final class LockRegistryService {
     
     private static final int CHECK_ACK_MAXIMUM = 5;
     
@@ -45,7 +45,7 @@ public final class LockRegistryCenter {
     
     private final LockNode lockNode;
     
-    public LockRegistryCenter(final RegistryCenterRepository repository) {
+    public LockRegistryService(final RegistryCenterRepository repository) {
         instanceId = GovernanceInstance.getInstance().getId();
         this.repository = repository;
         node = new RegistryCenterNode();
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryService.java
new file mode 100644
index 0000000..4e5e82d
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryService.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
+import 
org.apache.shardingsphere.governance.core.registry.service.GlobalRegistryService;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+
+import java.util.Properties;
+
+/**
+ * Properties registry service.
+ */
+@RequiredArgsConstructor
+public final class PropertiesRegistryService implements 
GlobalRegistryService<Properties> {
+    
+    private final RegistryCenterRepository repository;
+    
+    private final RegistryCenterNode node = new RegistryCenterNode();
+    
+    @Override
+    public void persist(final Properties props, final boolean isOverwrite) {
+        if (!props.isEmpty() && (isOverwrite || !isExisted())) {
+            repository.persist(node.getPropsPath(), YamlEngine.marshal(props));
+        }
+    }
+    
+    private boolean isExisted() {
+        return !Strings.isNullOrEmpty(repository.get(node.getPropsPath()));
+    }
+    
+    @Override
+    public Properties load() {
+        return Strings.isNullOrEmpty(repository.get(node.getPropsPath())) ? 
new Properties() : YamlEngine.unmarshal(repository.get(node.getPropsPath()), 
Properties.class);
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryService.java
new file mode 100644
index 0000000..0f7da56
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryService.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.governance.core.registry.RegistryCenterNode;
+import 
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationChecker;
+import 
org.apache.shardingsphere.governance.core.registry.checker.RuleConfigurationCheckerFactory;
+import 
org.apache.shardingsphere.governance.core.registry.service.SchemaBasedRegistryService;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.config.YamlRuleConfiguration;
+import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
+import 
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Optional;
+
+/**
+ * Schema rule registry service.
+ */
+@RequiredArgsConstructor
+public final class SchemaRuleRegistryService implements 
SchemaBasedRegistryService<Collection<RuleConfiguration>> {
+    
+    private final RegistryCenterRepository repository;
+    
+    private final RegistryCenterNode node = new RegistryCenterNode();
+    
+    @Override
+    public void persist(final String schemaName, final 
Collection<RuleConfiguration> configs, final boolean isOverwrite) {
+        if (!configs.isEmpty() && (isOverwrite || !isExisted(schemaName))) {
+            persist(schemaName, configs);
+        }
+    }
+    
+    @Override
+    public void persist(final String schemaName, final 
Collection<RuleConfiguration> configs) {
+        repository.persist(node.getRulePath(schemaName), 
YamlEngine.marshal(createYamlRuleConfigurations(schemaName, configs)));
+    }
+    
+    private Collection<YamlRuleConfiguration> 
createYamlRuleConfigurations(final String schemaName, final 
Collection<RuleConfiguration> ruleConfigs) {
+        Collection<RuleConfiguration> configs = new LinkedList<>();
+        for (RuleConfiguration each : ruleConfigs) {
+            Optional<RuleConfigurationChecker> checker = 
RuleConfigurationCheckerFactory.newInstance(each);
+            if (checker.isPresent()) {
+                checker.get().check(schemaName, each);
+                configs.add(each);
+            }
+        }
+        return new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(configs);
+    }
+    
+    @Override
+    @SuppressWarnings("unchecked")
+    public Collection<RuleConfiguration> load(final String schemaName) {
+        return isExisted(schemaName)
+                ? new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(YamlEngine.unmarshal(repository.get(node.getRulePath(schemaName)),
 Collection.class)) : new LinkedList<>();
+    }
+    
+    @Override
+    public boolean isExisted(final String schemaName) {
+        return 
!Strings.isNullOrEmpty(repository.get(node.getRulePath(schemaName)));
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
index 8424be6..27f5d70 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/lock/GovernanceLockTest.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.governance.core.lock;
 
 import org.apache.shardingsphere.governance.core.registry.RegistryCenter;
-import 
org.apache.shardingsphere.governance.core.registry.lock.LockRegistryCenter;
+import 
org.apache.shardingsphere.governance.core.registry.service.impl.LockRegistryService;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -34,29 +34,29 @@ import static org.mockito.Mockito.when;
 public final class GovernanceLockTest {
     
     @Mock
-    private LockRegistryCenter lockRegistryCenter;
+    private LockRegistryService lockRegistryService;
     
     private GovernanceLock lock;
     
     @Before
     public void setUp() {
         RegistryCenter registryCenter = mock(RegistryCenter.class);
-        when(registryCenter.getLock()).thenReturn(lockRegistryCenter);
+        when(registryCenter.getLockService()).thenReturn(lockRegistryService);
         lock = new GovernanceLock(registryCenter, 50L);
     }
     
     @Test
     public void assertTryLock() {
-        when(lockRegistryCenter.tryLock(eq("test"), 
eq(50L))).thenReturn(Boolean.TRUE);
+        when(lockRegistryService.tryLock(eq("test"), 
eq(50L))).thenReturn(Boolean.TRUE);
         lock.tryLock("test", 50L);
-        verify(lockRegistryCenter).tryLock(eq("test"), eq(50L));
+        verify(lockRegistryService).tryLock(eq("test"), eq(50L));
     }
     
     @Test
     public void assertReleaseLock() {
-        
when(lockRegistryCenter.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
+        
when(lockRegistryService.checkUnlockAck("test")).thenReturn(Boolean.TRUE);
         lock.releaseLock("test");
-        verify(lockRegistryCenter).checkUnlockAck(eq("test"));
-        verify(lockRegistryCenter).releaseLock(eq("test"));
+        verify(lockRegistryService).checkUnlockAck(eq("test"));
+        verify(lockRegistryService).releaseLock(eq("test"));
     }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
index 13c3ad3..ee73d50 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterTest.java
@@ -18,9 +18,6 @@
 package org.apache.shardingsphere.governance.core.registry;
 
 import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
-import 
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
-import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAddedEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.datasource.DataSourceAlteredEvent;
 import 
org.apache.shardingsphere.governance.core.registry.listener.event.metadata.MetaDataCreatedEvent;
@@ -31,18 +28,12 @@ import 
org.apache.shardingsphere.governance.core.yaml.schema.pojo.YamlSchema;
 import 
org.apache.shardingsphere.governance.core.yaml.schema.swapper.SchemaYamlSwapper;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
-import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 import 
org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
-import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
-import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -55,20 +46,17 @@ import java.lang.reflect.Field;
 import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.Optional;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
 import static org.hamcrest.CoreMatchers.hasItems;
 import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
@@ -82,11 +70,7 @@ import static org.mockito.Mockito.when;
 @RunWith(MockitoJUnitRunner.class)
 public final class RegistryCenterTest {
     
-    private static final String DATA_SOURCE_YAM = 
"yaml/registryCenter/data-source.yaml";
-    
     private static final String SHARDING_RULE_YAML = 
"yaml/registryCenter/data-sharding-rule.yaml";
-    
-    private static final String SHARDING_AND_ENCRYPT_RULE_YAML = 
"yaml/registryCenter/data-sharding-encrypt-rule.yaml";
 
     private static final String READWRITE_SPLITTING_RULE_YAML = 
"yaml/registryCenter/data-readwrite-splitting-rule.yaml";
     
@@ -100,8 +84,6 @@ public final class RegistryCenterTest {
     
     private static final String PROPS_YAML = 
ConfigurationPropertyKey.SQL_SHOW.getKey() + ": false\n";
     
-    private static final String DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL = 
"yaml/registryCenter/data-source-init-sql.yaml";
-    
     private static final String META_DATA_YAML = "yaml/schema.yaml";
     
     @Mock
@@ -155,7 +137,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForShardingRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -163,21 +144,18 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertMoreSchema() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), false);
         verify(registryCenterRepository, times(0)).persist("/metadata", 
"myTest1,myTest2,sharding_db");
     }
     
     @Test
     public void assertMoreAndContainsSchema() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), false);
         verify(registryCenterRepository, times(0)).persist("/metadata", 
"myTest1,sharding_db");
     }
     
     @Test
     public void 
assertPersistConfigurationForShardingRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -185,7 +163,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForShardingRuleWithoutAuthenticationAndIsOverwrite() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", readYAML(SHARDING_RULE_YAML));
@@ -193,7 +170,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForReplicaQueryRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(), 
false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -201,7 +177,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForReplicaQueryRuleWithoutAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(), 
false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -209,7 +184,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForReadwriteSplittingWithoutAuthenticationAndIsOverwrite()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(), 
true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", 
readYAML(READWRITE_SPLITTING_RULE_YAML));
@@ -217,7 +191,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForDatabaseDiscoveryRuleWithoutAuthenticationAndIsOverwrite()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createDatabaseDiscoveryRuleConfiguration(), 
true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", 
readYAML(DB_DISCOVERY_RULE_YAML));
@@ -225,7 +198,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForShardingRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -233,7 +205,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForShardingRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -241,7 +212,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForShardingRuleWithAuthenticationAndIsOverwrite() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", readYAML(SHARDING_RULE_YAML));
@@ -249,7 +219,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForReplicaQueryRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(), 
false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -257,7 +226,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForReadwriteSplittingRuleWithAuthenticationAndIsNotOverwriteAndConfigurationIsNotExisted()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(), 
false);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/rules"), 
any());
@@ -265,7 +233,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForReadwriteSplittingRuleWithAuthenticationAndIsOverwrite()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createReadwriteSplittingRuleConfiguration(), 
true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", 
readYAML(READWRITE_SPLITTING_RULE_YAML));
@@ -273,7 +240,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void 
assertPersistConfigurationForDatabaseDiscoveryRuleWithAuthenticationAndIsOverwrite()
 {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createDatabaseDiscoveryRuleConfiguration(), 
true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", 
readYAML(DB_DISCOVERY_RULE_YAML));
@@ -281,7 +247,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertPersistConfigurationForEncrypt() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createEncryptRuleConfiguration(), true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", readYAML(ENCRYPT_RULE_YAML));
@@ -289,13 +254,11 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertNullRuleConfiguration() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), Collections.emptyList(), true);
     }
     
     @Test
     public void assertPersistConfigurationForShadow() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createShadowRuleConfiguration(), true);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/dataSources"),
 any());
         verify(registryCenterRepository, 
times(0)).persist("/metadata/sharding_db/rules", readYAML(SHADOW_RULE_YAML));
@@ -303,7 +266,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertPersistGlobalConfiguration() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         
registryCenter.persistGlobalConfiguration(createGlobalRuleConfigurations(), 
createProperties(), true);
         verify(registryCenterRepository).persist(eq("/rules"), any());
         verify(registryCenterRepository).persist("/props", PROPS_YAML);
@@ -314,10 +276,6 @@ public final class RegistryCenterTest {
                 
DataSourceConfiguration.getDataSourceConfiguration(entry.getValue()), 
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
     }
     
-    private DataSourceConfiguration createDataSourceConfiguration(final 
DataSource dataSource) {
-        return DataSourceConfiguration.getDataSourceConfiguration(dataSource);
-    }
-    
     private Map<String, DataSource> createDataSourceMap() {
         Map<String, DataSource> result = new LinkedHashMap<>(2, 1);
         result.put("ds_0", createDataSource("ds_0"));
@@ -371,169 +329,14 @@ public final class RegistryCenterTest {
     }
     
     @Test
-    public void assertLoadDataSourceConfigurations() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAM));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Map<String, DataSourceConfiguration> actual = 
registryCenter.loadDataSourceConfigurations("sharding_db");
-        assertThat(actual.size(), is(2));
-        assertDataSourceConfiguration(actual.get("ds_0"), 
createDataSourceConfiguration(createDataSource("ds_0")));
-        assertDataSourceConfiguration(actual.get("ds_1"), 
createDataSourceConfiguration(createDataSource("ds_1")));
-    }
-    
-    private void assertDataSourceConfiguration(final DataSourceConfiguration 
actual, final DataSourceConfiguration expected) {
-        assertThat(actual.getDataSourceClassName(), 
is(expected.getDataSourceClassName()));
-        assertThat(actual.getProps().get("url"), 
is(expected.getProps().get("url")));
-        assertThat(actual.getProps().get("username"), 
is(expected.getProps().get("username")));
-        assertThat(actual.getProps().get("password"), 
is(expected.getProps().get("password")));
-    }
-    
-    @Test
-    public void assertLoadDataSourceConfigurationsNotExistPath() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn("");
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Map<String, DataSourceConfiguration> actual = 
registryCenter.loadDataSourceConfigurations("sharding_db");
-        assertThat(actual.size(), is(0));
-    }
-    
-    @Test
-    public void assertLoadShardingAndEncryptRuleConfiguration() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_AND_ENCRYPT_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Collection<RuleConfiguration> ruleConfigurations = 
registryCenter.loadRuleConfigurations("sharding_db");
-        assertThat(ruleConfigurations.size(), is(2));
-        for (RuleConfiguration each : ruleConfigurations) {
-            if (each instanceof ShardingRuleConfiguration) {
-                ShardingRuleConfiguration shardingRuleConfig = 
(ShardingRuleConfiguration) each;
-                assertThat(shardingRuleConfig.getTables().size(), is(1));
-                
assertThat(shardingRuleConfig.getTables().iterator().next().getLogicTable(), 
is("t_order"));
-            } else if (each instanceof EncryptRuleConfiguration) {
-                EncryptRuleConfiguration encryptRuleConfig = 
(EncryptRuleConfiguration) each;
-                assertThat(encryptRuleConfig.getEncryptors().size(), is(2));
-                ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = 
encryptRuleConfig.getEncryptors().get("aes_encryptor");
-                assertThat(encryptAlgorithmConfig.getType(), is("AES"));
-                
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(), 
is("123456abcd"));
-            }
-        }
-    }
-    
-    @Test
-    public void assertLoadShardingRuleConfiguration() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Collection<RuleConfiguration> actual = 
registryCenter.loadRuleConfigurations("sharding_db");
-        assertThat(actual.size(), is(1));
-        ShardingRuleConfiguration actualShardingRuleConfig = 
(ShardingRuleConfiguration) actual.iterator().next();
-        assertThat(actualShardingRuleConfig.getTables().size(), is(1));
-        
assertThat(actualShardingRuleConfig.getTables().iterator().next().getLogicTable(),
 is("t_order"));
-    }
-    
-    @Test
-    public void assertLoadReadwriteSplittingRuleConfiguration() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(READWRITE_SPLITTING_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Collection<RuleConfiguration> actual = 
registryCenter.loadRuleConfigurations("sharding_db");
-        ReadwriteSplittingRuleConfiguration config = 
(ReadwriteSplittingRuleConfiguration) actual.iterator().next();
-        assertThat(config.getDataSources().size(), is(1));
-        
assertThat(config.getDataSources().iterator().next().getWriteDataSourceName(), 
is("write_ds"));
-        
assertThat(config.getDataSources().iterator().next().getReadDataSourceNames().size(),
 is(2));
-    }
-    
-    @Test
-    public void assertLoadDatabaseDiscoveryRuleConfiguration() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(DB_DISCOVERY_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Collection<RuleConfiguration> actual = 
registryCenter.loadRuleConfigurations("sharding_db");
-        DatabaseDiscoveryRuleConfiguration config = 
(DatabaseDiscoveryRuleConfiguration) actual.iterator().next();
-        assertThat(config.getDataSources().size(), is(1));
-        
assertThat(config.getDataSources().iterator().next().getDataSourceNames().size(),
 is(3));
-    }
-    
-    @Test
-    public void assertLoadEncryptRuleConfiguration() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(ENCRYPT_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        EncryptRuleConfiguration actual = (EncryptRuleConfiguration) 
registryCenter.loadRuleConfigurations("sharding_db").iterator().next();
-        assertThat(actual.getEncryptors().size(), is(1));
-        ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = 
actual.getEncryptors().get("order_encryptor");
-        assertThat(encryptAlgorithmConfig.getType(), is("AES"));
-        
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(), 
is("123456"));
-    }
-    
-    @Test
-    public void assertLoadShadowRuleConfiguration() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHADOW_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        ShadowRuleConfiguration actual = (ShadowRuleConfiguration) 
registryCenter.loadRuleConfigurations("sharding_db").iterator().next();
-        assertThat(actual.getSourceDataSourceNames(), is(Arrays.asList("ds", 
"ds1")));
-        assertThat(actual.getShadowDataSourceNames(), 
is(Arrays.asList("shadow_ds", "shadow_ds1")));
-        assertThat(actual.getColumn(), is("shadow"));
-    }
-    
-    @Test
-    public void assertLoadProperties() {
-        when(registryCenterRepository.get("/props")).thenReturn(PROPS_YAML);
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Properties actual = registryCenter.loadProperties();
-        assertThat(actual.get(ConfigurationPropertyKey.SQL_SHOW.getKey()), 
is(Boolean.FALSE));
-    }
-    
-    @Test
-    public void assertLoadGlobalRuleConfigurations() {
-        
when(registryCenterRepository.get("/rules")).thenReturn(readYAML(GLOBAL_RULE_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Collection<RuleConfiguration> globalRuleConfigs = 
registryCenter.loadGlobalRuleConfigurations();
-        assertFalse(globalRuleConfigs.isEmpty());
-        Collection<ShardingSphereUser> users = 
globalRuleConfigs.stream().filter(each -> each instanceof 
AuthorityRuleConfiguration)
-                .flatMap(each -> ((AuthorityRuleConfiguration) 
each).getUsers().stream()).collect(Collectors.toList());
-        Optional<ShardingSphereUser> user = users.stream().filter(each -> 
each.getGrantee().equals(new Grantee("root", ""))).findFirst();
-        assertTrue(user.isPresent());
-        assertThat(user.get().getPassword(), is("root"));
-        Collection<ShardingSphereAlgorithmConfiguration> providers = 
globalRuleConfigs.stream()
-                .filter(each -> each instanceof AuthorityRuleConfiguration && 
Objects.nonNull(((AuthorityRuleConfiguration) each).getProvider()))
-                .map(each -> ((AuthorityRuleConfiguration) 
each).getProvider()).collect(Collectors.toList());
-        assertFalse(providers.isEmpty());
-        Optional<ShardingSphereAlgorithmConfiguration> nativeProvider = 
providers.stream().filter(each -> "NATIVE".equals(each.getType())).findFirst();
-        assertTrue(nativeProvider.isPresent());
-    }
-    
-    @Test
     public void assertLoadAllSchemaNames() {
         
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         Collection<String> actual = registryCenter.loadAllSchemaNames();
         assertThat(actual.size(), is(2));
         assertThat(actual, hasItems("sharding_db"));
         assertThat(actual, hasItems("replica_query_db"));
     }
     
-    @Test
-    public void assertLoadDataSourceConfigurationsWithConnectionInitSQLs() {
-        
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
-        Map<String, DataSourceConfiguration> actual = 
registryCenter.loadDataSourceConfigurations("sharding_db");
-        assertThat(actual.size(), is(2));
-        
assertDataSourceConfigurationWithConnectionInitSqls(actual.get("ds_0"), 
createDataSourceConfiguration(createDataSourceWithConnectionInitSqls("ds_0")));
-        
assertDataSourceConfigurationWithConnectionInitSqls(actual.get("ds_1"), 
createDataSourceConfiguration(createDataSourceWithConnectionInitSqls("ds_1")));
-    }
-    
-    private DataSource createDataSourceWithConnectionInitSqls(final String 
name) {
-        MockDataSource result = new MockDataSource();
-        result.setDriverClassName("com.mysql.jdbc.Driver");
-        result.setUrl("jdbc:mysql://localhost:3306/" + name);
-        result.setUsername("root");
-        result.setPassword("root");
-        result.setConnectionInitSqls(Arrays.asList("set names utf8mb4;", "set 
names utf8;"));
-        return result;
-    }
-    
-    private void assertDataSourceConfigurationWithConnectionInitSqls(final 
DataSourceConfiguration actual, final DataSourceConfiguration expected) {
-        assertThat(actual.getDataSourceClassName(), 
is(expected.getDataSourceClassName()));
-        assertThat(actual.getProps().get("url"), 
is(expected.getProps().get("url")));
-        assertThat(actual.getProps().get("username"), 
is(expected.getProps().get("username")));
-        assertThat(actual.getProps().get("password"), 
is(expected.getProps().get("password")));
-        assertThat(actual.getProps().get("connectionInitSqls"), 
is(expected.getProps().get("connectionInitSqls")));
-    }
-    
     @SneakyThrows({IOException.class, URISyntaxException.class})
     private String readYAML(final String yamlFile) {
         return 
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
@@ -542,7 +345,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertPersistSchemaNameWithExistSchema() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db");
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), true);
         verify(registryCenterRepository, times(0)).persist(eq("/metadata"), 
eq("sharding_db"));
@@ -550,7 +352,6 @@ public final class RegistryCenterTest {
     
     @Test
     public void assertPersistSchemaNameWithExistAndNewSchema() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         
when(registryCenterRepository.get("/metadata")).thenReturn("replica_query_db");
         registryCenter.persistConfigurations("sharding_db", 
createDataSourceConfigurations(), createRuleConfigurations(), true);
         verify(registryCenterRepository).persist(eq("/metadata"), 
eq("replica_query_db,sharding_db"));
@@ -559,7 +360,6 @@ public final class RegistryCenterTest {
     @Test
     public void assertRenewDataSourceEvent() {
         DataSourceAddedEvent event = new DataSourceAddedEvent("sharding_db", 
createDataSourceConfigurations());
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         
verify(registryCenterRepository).persist(startsWith("/metadata/sharding_db/dataSources"),
 anyString());
     }
@@ -567,7 +367,6 @@ public final class RegistryCenterTest {
     @Test
     public void assertRenewDataSourceEventHasDataSourceConfig() {
         DataSourceAddedEvent event = new DataSourceAddedEvent("sharding_db", 
createDataSourceConfigurations());
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         String dataSourceYaml = "ds_0:\n"
             + "  dataSourceClassName: xxx\n"
             + "  url: 
jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false\n"
@@ -587,7 +386,6 @@ public final class RegistryCenterTest {
     @Test
     public void assertRenewRuleEvent() {
         RuleConfigurationsAlteredEvent event = new 
RuleConfigurationsAlteredEvent("sharding_db", createRuleConfigurations());
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         
verify(registryCenterRepository).persist(startsWith("/metadata/sharding_db/rules"),
 anyString());
     }
@@ -596,7 +394,6 @@ public final class RegistryCenterTest {
     public void assertRenewSchemaNameEventWithDrop() {
         MetaDataDroppedEvent event = new MetaDataDroppedEvent("sharding_db");
         
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         verify(registryCenterRepository).persist(eq("/metadata"), 
eq("replica_query_db"));
     }
@@ -605,7 +402,6 @@ public final class RegistryCenterTest {
     public void assertRenewSchemaNameEventWithDropAndNotExist() {
         MetaDataDroppedEvent event = new MetaDataDroppedEvent("sharding_db");
         
when(registryCenterRepository.get("/metadata")).thenReturn("replica_query_db");
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         verify(registryCenterRepository, times(0)).persist(eq("/metadata"), 
eq("replica_query_db"));
     }
@@ -614,7 +410,6 @@ public final class RegistryCenterTest {
     public void assertRenewSchemaNameEventWithAdd() {
         MetaDataCreatedEvent event = new MetaDataCreatedEvent("sharding_db");
         
when(registryCenterRepository.get("/metadata")).thenReturn("replica_query_db");
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         verify(registryCenterRepository).persist(eq("/metadata"), 
eq("replica_query_db,sharding_db"));
     }
@@ -623,7 +418,6 @@ public final class RegistryCenterTest {
     public void assertRenewSchemaNameEventWithAddAndExist() {
         MetaDataCreatedEvent event = new MetaDataCreatedEvent("sharding_db");
         
when(registryCenterRepository.get("/metadata")).thenReturn("sharding_db,replica_query_db");
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         verify(registryCenterRepository, times(0)).persist(eq("/metadata"), 
eq("sharding_db,replica_query_db"));
     }
@@ -631,7 +425,6 @@ public final class RegistryCenterTest {
     @Test
     public void assertPersistSchema() {
         ShardingSphereSchema schema = new 
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(META_DATA_YAML), 
YamlSchema.class));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.persistSchema("sharding_db", schema);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/schema"), 
anyString());
     }
@@ -639,7 +432,6 @@ public final class RegistryCenterTest {
     @Test
     public void assertLoadSchema() {
         
when(registryCenterRepository.get("/metadata/sharding_db/schema")).thenReturn(readYAML(META_DATA_YAML));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         Optional<ShardingSphereSchema> schemaOptional = 
registryCenter.loadSchema("sharding_db");
         assertTrue(schemaOptional.isPresent());
         Optional<ShardingSphereSchema> empty = 
registryCenter.loadSchema("test");
@@ -655,14 +447,12 @@ public final class RegistryCenterTest {
     @Test
     public void assertRenewSchemaAlteredEvent() {
         SchemaAlteredEvent event = new SchemaAlteredEvent("sharding_db", new 
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(META_DATA_YAML), 
YamlSchema.class)));
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         
verify(registryCenterRepository).persist(eq("/metadata/sharding_db/schema"), 
anyString());
     }
     
     @Test
     public void assertDeleteSchema() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.deleteSchema("sharding_db");
         verify(registryCenterRepository).delete(eq("/metadata/sharding_db"));
     }
@@ -670,7 +460,6 @@ public final class RegistryCenterTest {
     @Test
     @SneakyThrows
     public void assertRenewSwitchRuleConfigurationEvent() {
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         Field field = 
RegistryCenter.class.getDeclaredField("registryCacheManager");
         field.setAccessible(true);
         field.set(registryCenter, registryCacheManager);
@@ -684,7 +473,6 @@ public final class RegistryCenterTest {
     @Test
     public void assertRenewDataSourceAlteredEvent() {
         DataSourceAlteredEvent event = new 
DataSourceAlteredEvent("sharding_db", createDataSourceConfigurations());
-        RegistryCenter registryCenter = new 
RegistryCenter(registryCenterRepository);
         registryCenter.renew(event);
         
verify(registryCenterRepository).persist(startsWith("/metadata/sharding_db/dataSources"),
 anyString());
     }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryServiceTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryServiceTest.java
new file mode 100644
index 0000000..8cb2334
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/DataSourceRegistryServiceTest.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import lombok.SneakyThrows;
+import org.apache.shardingsphere.governance.core.registry.MockDataSource;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import javax.sql.DataSource;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class DataSourceRegistryServiceTest {
+    
+    private static final String DATA_SOURCE_YAM = 
"yaml/registryCenter/data-source.yaml";
+    
+    private static final String DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL = 
"yaml/registryCenter/data-source-init-sql.yaml";
+    
+    @Mock
+    private RegistryCenterRepository registryCenterRepository;
+    
+    private DataSourceRegistryService dataSourceRegistryService;
+    
+    @Before
+    public void setUp() throws ReflectiveOperationException {
+        dataSourceRegistryService = new 
DataSourceRegistryService(registryCenterRepository);
+        Field field = 
dataSourceRegistryService.getClass().getDeclaredField("repository");
+        field.setAccessible(true);
+        field.set(dataSourceRegistryService, registryCenterRepository);
+    }
+    
+    @Test
+    public void assertLoad() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAM));
+        Map<String, DataSourceConfiguration> actual = 
dataSourceRegistryService.load("sharding_db");
+        assertThat(actual.size(), is(2));
+        assertDataSourceConfiguration(actual.get("ds_0"), 
createDataSourceConfiguration(createDataSource("ds_0")));
+        assertDataSourceConfiguration(actual.get("ds_1"), 
createDataSourceConfiguration(createDataSource("ds_1")));
+    }
+    
+    private void assertDataSourceConfiguration(final DataSourceConfiguration 
actual, final DataSourceConfiguration expected) {
+        assertThat(actual.getDataSourceClassName(), 
is(expected.getDataSourceClassName()));
+        assertThat(actual.getProps().get("url"), 
is(expected.getProps().get("url")));
+        assertThat(actual.getProps().get("username"), 
is(expected.getProps().get("username")));
+        assertThat(actual.getProps().get("password"), 
is(expected.getProps().get("password")));
+    }
+    
+    @Test
+    public void assertLoadWhenPathNotExist() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn("");
+        Map<String, DataSourceConfiguration> actual = 
dataSourceRegistryService.load("sharding_db");
+        assertThat(actual.size(), is(0));
+    }
+    
+    @Test
+    public void assertLoadWithConnectionInitSQLs() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/dataSources")).thenReturn(readYAML(DATA_SOURCE_YAML_WITH_CONNECTION_INIT_SQL));
+        Map<String, DataSourceConfiguration> actual = 
dataSourceRegistryService.load("sharding_db");
+        assertThat(actual.size(), is(2));
+        
assertDataSourceConfigurationWithConnectionInitSQLs(actual.get("ds_0"), 
createDataSourceConfiguration(createDataSourceWithConnectionInitSQLs("ds_0")));
+        
assertDataSourceConfigurationWithConnectionInitSQLs(actual.get("ds_1"), 
createDataSourceConfiguration(createDataSourceWithConnectionInitSQLs("ds_1")));
+    }
+    
+    private DataSource createDataSourceWithConnectionInitSQLs(final String 
name) {
+        MockDataSource result = new MockDataSource();
+        result.setDriverClassName("com.mysql.jdbc.Driver");
+        result.setUrl("jdbc:mysql://localhost:3306/" + name);
+        result.setUsername("root");
+        result.setPassword("root");
+        result.setConnectionInitSqls(Arrays.asList("set names utf8mb4;", "set 
names utf8;"));
+        return result;
+    }
+    
+    private void assertDataSourceConfigurationWithConnectionInitSQLs(final 
DataSourceConfiguration actual, final DataSourceConfiguration expected) {
+        assertThat(actual.getDataSourceClassName(), 
is(expected.getDataSourceClassName()));
+        assertThat(actual.getProps().get("url"), 
is(expected.getProps().get("url")));
+        assertThat(actual.getProps().get("username"), 
is(expected.getProps().get("username")));
+        assertThat(actual.getProps().get("password"), 
is(expected.getProps().get("password")));
+        assertThat(actual.getProps().get("connectionInitSqls"), 
is(expected.getProps().get("connectionInitSqls")));
+    }
+    
+    private DataSourceConfiguration createDataSourceConfiguration(final 
DataSource dataSource) {
+        return DataSourceConfiguration.getDataSourceConfiguration(dataSource);
+    }
+    
+    @SneakyThrows({IOException.class, URISyntaxException.class})
+    private String readYAML(final String yamlFile) {
+        return 
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
+                .stream().filter(each -> !each.startsWith("#")).map(each -> 
each + System.lineSeparator()).collect(Collectors.joining());
+    }
+    
+    private DataSource createDataSource(final String name) {
+        MockDataSource result = new MockDataSource();
+        result.setDriverClassName("com.mysql.jdbc.Driver");
+        result.setUrl("jdbc:mysql://localhost:3306/" + name);
+        result.setUsername("root");
+        result.setPassword("root");
+        return result;
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryServiceTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryServiceTest.java
new file mode 100644
index 0000000..e7acda8
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/GlobalRuleRegistryServiceTest.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import lombok.SneakyThrows;
+import 
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.metadata.user.Grantee;
+import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class GlobalRuleRegistryServiceTest {
+    
+    private static final String GLOBAL_RULE_YAML = 
"yaml/registryCenter/data-global-rule.yaml";
+    
+    @Mock
+    private RegistryCenterRepository registryCenterRepository;
+    
+    private GlobalRuleRegistryService globalRuleRegistryService;
+    
+    @Before
+    public void setUp() throws ReflectiveOperationException {
+        globalRuleRegistryService = new 
GlobalRuleRegistryService(registryCenterRepository);
+        Field field = 
globalRuleRegistryService.getClass().getDeclaredField("repository");
+        field.setAccessible(true);
+        field.set(globalRuleRegistryService, registryCenterRepository);
+    }
+    
+    @Test
+    public void assertLoad() {
+        
when(registryCenterRepository.get("/rules")).thenReturn(readYAML(GLOBAL_RULE_YAML));
+        Collection<RuleConfiguration> globalRuleConfigs = 
globalRuleRegistryService.load();
+        assertFalse(globalRuleConfigs.isEmpty());
+        Collection<ShardingSphereUser> users = 
globalRuleConfigs.stream().filter(each -> each instanceof 
AuthorityRuleConfiguration)
+                .flatMap(each -> ((AuthorityRuleConfiguration) 
each).getUsers().stream()).collect(Collectors.toList());
+        Optional<ShardingSphereUser> user = users.stream().filter(each -> 
each.getGrantee().equals(new Grantee("root", ""))).findFirst();
+        assertTrue(user.isPresent());
+        assertThat(user.get().getPassword(), is("root"));
+        Collection<ShardingSphereAlgorithmConfiguration> providers = 
globalRuleConfigs.stream()
+                .filter(each -> each instanceof AuthorityRuleConfiguration && 
Objects.nonNull(((AuthorityRuleConfiguration) each).getProvider()))
+                .map(each -> ((AuthorityRuleConfiguration) 
each).getProvider()).collect(Collectors.toList());
+        assertFalse(providers.isEmpty());
+        Optional<ShardingSphereAlgorithmConfiguration> nativeProvider = 
providers.stream().filter(each -> "NATIVE".equals(each.getType())).findFirst();
+        assertTrue(nativeProvider.isPresent());
+    }
+    
+    @SneakyThrows({IOException.class, URISyntaxException.class})
+    private String readYAML(final String yamlFile) {
+        return 
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
+                .stream().filter(each -> !each.startsWith("#")).map(each -> 
each + System.lineSeparator()).collect(Collectors.joining());
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryServiceTest.java
similarity index 78%
copy from 
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
copy to 
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryServiceTest.java
index f0fe4b2..f3672c3 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/LockRegistryServiceTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.registry.lock;
+package org.apache.shardingsphere.governance.core.registry.service.impl;
 
 import org.apache.shardingsphere.governance.core.lock.node.LockNode;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
@@ -33,36 +33,36 @@ import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.verify;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class LockRegistryCenterTest {
+public final class LockRegistryServiceTest {
     
     @Mock
     private RegistryCenterRepository registryCenterRepository;
     
-    private LockRegistryCenter lockRegistryCenter;
+    private LockRegistryService lockRegistryService;
     
     @Before
     public void setUp() throws ReflectiveOperationException {
-        lockRegistryCenter = new LockRegistryCenter(registryCenterRepository);
-        Field field = 
lockRegistryCenter.getClass().getDeclaredField("repository");
+        lockRegistryService = new 
LockRegistryService(registryCenterRepository);
+        Field field = 
lockRegistryService.getClass().getDeclaredField("repository");
         field.setAccessible(true);
-        field.set(lockRegistryCenter, registryCenterRepository);
+        field.set(lockRegistryService, registryCenterRepository);
     }
     
     @Test
     public void assertTryLock() {
-        lockRegistryCenter.tryLock("test", 50L);
+        lockRegistryService.tryLock("test", 50L);
         verify(registryCenterRepository).tryLock(eq(new 
LockNode().getLockNodePath("test")), eq(50L), eq(TimeUnit.MILLISECONDS));
     }
     
     @Test
     public void assertReleaseLock() {
-        lockRegistryCenter.releaseLock("test");
+        lockRegistryService.releaseLock("test");
         verify(registryCenterRepository).releaseLock(eq(new 
LockNode().getLockNodePath("test")));
     }
     
     @Test
     public void assertDeleteLockAck() {
-        lockRegistryCenter.deleteLockAck("test");
+        lockRegistryService.deleteLockAck("test");
         verify(registryCenterRepository).delete(anyString());
     }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryServiceTest.java
similarity index 52%
rename from 
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
rename to 
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryServiceTest.java
index f0fe4b2..eaa9888 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/lock/LockRegistryCenterTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/PropertiesRegistryServiceTest.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.governance.core.registry.lock;
+package org.apache.shardingsphere.governance.core.registry.service.impl;
 
-import org.apache.shardingsphere.governance.core.lock.node.LockNode;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -26,43 +26,34 @@ import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.lang.reflect.Field;
-import java.util.concurrent.TimeUnit;
+import java.util.Properties;
 
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.verify;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class LockRegistryCenterTest {
+public final class PropertiesRegistryServiceTest {
+    
+    private static final String PROPS_YAML = 
ConfigurationPropertyKey.SQL_SHOW.getKey() + ": false\n";
     
     @Mock
     private RegistryCenterRepository registryCenterRepository;
     
-    private LockRegistryCenter lockRegistryCenter;
+    private PropertiesRegistryService propertiesRegistryService;
     
     @Before
     public void setUp() throws ReflectiveOperationException {
-        lockRegistryCenter = new LockRegistryCenter(registryCenterRepository);
-        Field field = 
lockRegistryCenter.getClass().getDeclaredField("repository");
+        propertiesRegistryService = new 
PropertiesRegistryService(registryCenterRepository);
+        Field field = 
propertiesRegistryService.getClass().getDeclaredField("repository");
         field.setAccessible(true);
-        field.set(lockRegistryCenter, registryCenterRepository);
-    }
-    
-    @Test
-    public void assertTryLock() {
-        lockRegistryCenter.tryLock("test", 50L);
-        verify(registryCenterRepository).tryLock(eq(new 
LockNode().getLockNodePath("test")), eq(50L), eq(TimeUnit.MILLISECONDS));
-    }
-    
-    @Test
-    public void assertReleaseLock() {
-        lockRegistryCenter.releaseLock("test");
-        verify(registryCenterRepository).releaseLock(eq(new 
LockNode().getLockNodePath("test")));
+        field.set(propertiesRegistryService, registryCenterRepository);
     }
     
     @Test
-    public void assertDeleteLockAck() {
-        lockRegistryCenter.deleteLockAck("test");
-        verify(registryCenterRepository).delete(anyString());
+    public void assertLoad() {
+        when(registryCenterRepository.get("/props")).thenReturn(PROPS_YAML);
+        Properties actual = propertiesRegistryService.load();
+        assertThat(actual.get(ConfigurationPropertyKey.SQL_SHOW.getKey()), 
is(Boolean.FALSE));
     }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryServiceTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryServiceTest.java
new file mode 100644
index 0000000..efc2ca9
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/service/impl/SchemaRuleRegistryServiceTest.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.service.impl;
+
+import lombok.SneakyThrows;
+import 
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
+import org.apache.shardingsphere.encrypt.api.config.EncryptRuleConfiguration;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
+import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
+import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class SchemaRuleRegistryServiceTest {
+    
+    private static final String SHARDING_RULE_YAML = 
"yaml/registryCenter/data-sharding-rule.yaml";
+    
+    private static final String READWRITE_SPLITTING_RULE_YAML = 
"yaml/registryCenter/data-readwrite-splitting-rule.yaml";
+    
+    private static final String DB_DISCOVERY_RULE_YAML = 
"yaml/registryCenter/data-database-discovery-rule.yaml";
+    
+    private static final String ENCRYPT_RULE_YAML = 
"yaml/registryCenter/data-encrypt-rule.yaml";
+    
+    private static final String SHADOW_RULE_YAML = 
"yaml/registryCenter/data-shadow-rule.yaml";
+    
+    private static final String SHARDING_AND_ENCRYPT_RULE_YAML = 
"yaml/registryCenter/data-sharding-encrypt-rule.yaml";
+    
+    @Mock
+    private RegistryCenterRepository registryCenterRepository;
+    
+    private SchemaRuleRegistryService schemaRuleRegistryService;
+    
+    @Before
+    public void setUp() throws ReflectiveOperationException {
+        schemaRuleRegistryService = new 
SchemaRuleRegistryService(registryCenterRepository);
+        Field field = 
schemaRuleRegistryService.getClass().getDeclaredField("repository");
+        field.setAccessible(true);
+        field.set(schemaRuleRegistryService, registryCenterRepository);
+    }
+    
+    @Test
+    public void assertLoadShardingAndEncryptRuleConfigurations() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_AND_ENCRYPT_RULE_YAML));
+        Collection<RuleConfiguration> ruleConfigurations = 
schemaRuleRegistryService.load("sharding_db");
+        assertThat(ruleConfigurations.size(), is(2));
+        for (RuleConfiguration each : ruleConfigurations) {
+            if (each instanceof ShardingRuleConfiguration) {
+                ShardingRuleConfiguration shardingRuleConfig = 
(ShardingRuleConfiguration) each;
+                assertThat(shardingRuleConfig.getTables().size(), is(1));
+                
assertThat(shardingRuleConfig.getTables().iterator().next().getLogicTable(), 
is("t_order"));
+            } else if (each instanceof EncryptRuleConfiguration) {
+                EncryptRuleConfiguration encryptRuleConfig = 
(EncryptRuleConfiguration) each;
+                assertThat(encryptRuleConfig.getEncryptors().size(), is(2));
+                ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = 
encryptRuleConfig.getEncryptors().get("aes_encryptor");
+                assertThat(encryptAlgorithmConfig.getType(), is("AES"));
+                
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(), 
is("123456abcd"));
+            }
+        }
+    }
+    
+    @Test
+    public void assertLoadShardingRuleConfiguration() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHARDING_RULE_YAML));
+        Collection<RuleConfiguration> actual = 
schemaRuleRegistryService.load("sharding_db");
+        assertThat(actual.size(), is(1));
+        ShardingRuleConfiguration actualShardingRuleConfig = 
(ShardingRuleConfiguration) actual.iterator().next();
+        assertThat(actualShardingRuleConfig.getTables().size(), is(1));
+        
assertThat(actualShardingRuleConfig.getTables().iterator().next().getLogicTable(),
 is("t_order"));
+    }
+    
+    @Test
+    public void assertLoadReadwriteSplittingRuleConfiguration() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(READWRITE_SPLITTING_RULE_YAML));
+        Collection<RuleConfiguration> actual = 
schemaRuleRegistryService.load("sharding_db");
+        ReadwriteSplittingRuleConfiguration config = 
(ReadwriteSplittingRuleConfiguration) actual.iterator().next();
+        assertThat(config.getDataSources().size(), is(1));
+        
assertThat(config.getDataSources().iterator().next().getWriteDataSourceName(), 
is("write_ds"));
+        
assertThat(config.getDataSources().iterator().next().getReadDataSourceNames().size(),
 is(2));
+    }
+    
+    @Test
+    public void assertLoadDatabaseDiscoveryRuleConfiguration() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(DB_DISCOVERY_RULE_YAML));
+        Collection<RuleConfiguration> actual = 
schemaRuleRegistryService.load("sharding_db");
+        DatabaseDiscoveryRuleConfiguration config = 
(DatabaseDiscoveryRuleConfiguration) actual.iterator().next();
+        assertThat(config.getDataSources().size(), is(1));
+        
assertThat(config.getDataSources().iterator().next().getDataSourceNames().size(),
 is(3));
+    }
+    
+    @Test
+    public void assertLoadEncryptRuleConfiguration() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(ENCRYPT_RULE_YAML));
+        EncryptRuleConfiguration actual = (EncryptRuleConfiguration) 
schemaRuleRegistryService.load("sharding_db").iterator().next();
+        assertThat(actual.getEncryptors().size(), is(1));
+        ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = 
actual.getEncryptors().get("order_encryptor");
+        assertThat(encryptAlgorithmConfig.getType(), is("AES"));
+        
assertThat(encryptAlgorithmConfig.getProps().get("aes-key-value").toString(), 
is("123456"));
+    }
+    
+    @Test
+    public void assertLoadShadowRuleConfiguration() {
+        
when(registryCenterRepository.get("/metadata/sharding_db/rules")).thenReturn(readYAML(SHADOW_RULE_YAML));
+        ShadowRuleConfiguration actual = (ShadowRuleConfiguration) 
schemaRuleRegistryService.load("sharding_db").iterator().next();
+        assertThat(actual.getSourceDataSourceNames(), is(Arrays.asList("ds", 
"ds1")));
+        assertThat(actual.getShadowDataSourceNames(), 
is(Arrays.asList("shadow_ds", "shadow_ds1")));
+        assertThat(actual.getColumn(), is("shadow"));
+    }
+    
+    @SneakyThrows({IOException.class, URISyntaxException.class})
+    private String readYAML(final String yamlFile) {
+        return 
Files.readAllLines(Paths.get(ClassLoader.getSystemResource(yamlFile).toURI()))
+                .stream().filter(each -> !each.startsWith("#")).map(each -> 
each + System.lineSeparator()).collect(Collectors.joining());
+    }
+}
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index 7576ebf..cf0b416 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -93,11 +93,11 @@ public final class GovernanceShardingSphereDataSource 
extends AbstractUnsupporte
     
     private StandardMetaDataContexts createMetaDataContexts(final 
GovernanceFacade governanceFacade) throws SQLException {
         RegistryCenter registryCenter = governanceFacade.getRegistryCenter();
-        Map<String, DataSourceConfiguration> dataSourceConfigs = 
registryCenter.loadDataSourceConfigurations(DefaultSchema.LOGIC_NAME);
-        Collection<RuleConfiguration> ruleConfigurations = 
registryCenter.loadRuleConfigurations(DefaultSchema.LOGIC_NAME);
+        Map<String, DataSourceConfiguration> dataSourceConfigs = 
registryCenter.getDataSourceService().load(DefaultSchema.LOGIC_NAME);
+        Collection<RuleConfiguration> ruleConfigurations = 
registryCenter.getSchemaRuleService().load(DefaultSchema.LOGIC_NAME);
         Map<String, DataSource> dataSourceMap = 
DataSourceConverter.getDataSourceMap(dataSourceConfigs);
         MetaDataContextsBuilder metaDataContextsBuilder = new 
MetaDataContextsBuilder(Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
dataSourceMap), 
-                Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
ruleConfigurations), registryCenter.loadGlobalRuleConfigurations(), 
registryCenter.loadProperties());
+                Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
ruleConfigurations), registryCenter.getGlobalRuleService().load(), 
registryCenter.getPropsService().load());
         return metaDataContextsBuilder.build();
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
index 43f0439..b574c52 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/GovernanceBootstrapInitializer.java
@@ -98,21 +98,22 @@ public final class GovernanceBootstrapInitializer extends 
AbstractBootstrapIniti
         Collection<String> schemaNames = 
governanceFacade.getRegistryCenter().loadAllSchemaNames();
         Map<String, Map<String, DataSourceParameter>> schemaDataSources = 
loadDataSourceParametersMap(schemaNames);
         Map<String, Collection<RuleConfiguration>> schemaRules = 
loadSchemaRules(schemaNames);
-        Properties props = 
governanceFacade.getRegistryCenter().loadProperties();
+        Properties props = 
governanceFacade.getRegistryCenter().getPropsService().load();
         // TODO load global rules from reg center
-        Collection<RuleConfiguration> globalRuleConfigs = 
governanceFacade.getRegistryCenter().loadGlobalRuleConfigurations();
+        Collection<RuleConfiguration> globalRuleConfigs = 
governanceFacade.getRegistryCenter().getGlobalRuleService().load();
         return new ProxyConfiguration(schemaDataSources, schemaRules, 
globalRuleConfigs, props);
     }
     
     private Map<String, Map<String, DataSourceParameter>> 
loadDataSourceParametersMap(final Collection<String> schemaNames) {
         return schemaNames.stream()
-            .collect(Collectors.toMap(each -> each, each -> 
DataSourceParameterConverter.getDataSourceParameterMap(governanceFacade.getRegistryCenter().loadDataSourceConfigurations(each)),
+            .collect(Collectors.toMap(each -> each, 
+                each -> 
DataSourceParameterConverter.getDataSourceParameterMap(governanceFacade.getRegistryCenter().getDataSourceService().load(each)),
                 (oldValue, currentValue) -> oldValue, LinkedHashMap::new));
     }
     
     private Map<String, Collection<RuleConfiguration>> loadSchemaRules(final 
Collection<String> schemaNames) {
-        return schemaNames.stream()
-             .collect(Collectors.toMap(each -> each, each -> 
governanceFacade.getRegistryCenter().loadRuleConfigurations(each), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
+        return schemaNames.stream().collect(
+                Collectors.toMap(each -> each, each -> 
governanceFacade.getRegistryCenter().getSchemaRuleService().load(each), 
(oldValue, currentValue) -> oldValue, LinkedHashMap::new));
     }
     
     @Override

Reply via email to