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 717c999  Use direct call to instead of event post on 
AddResourceBackendHandler (#11488)
717c999 is described below

commit 717c99918248f66d683ef60a4f961ee37470c687
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 24 22:50:31 2021 +0800

    Use direct call to instead of event post on AddResourceBackendHandler 
(#11488)
    
    * Add MetaDataContexts.getConfigCenter()
    
    * Use direct call to refactor AddResourceBackendHandler
    
    * Use direct call to refactor AddResourceBackendHandler
    
    * Fix test case
    
    * Add DataSourcePersistService.append()
    
    * Add test case
---
 .../metadata/GovernanceMetaDataContexts.java       | 28 ++++++++--------
 .../metadata/GovernanceMetaDataContextsTest.java   |  2 +-
 .../DataSourceAddedSQLNotificationEvent.java       | 37 ----------------------
 .../subscriber/DataSourceRegistrySubscriber.java   | 15 +--------
 .../DataSourceRegistrySubscriberTest.java          | 11 +------
 .../service/impl/DataSourcePersistService.java     | 12 +++++++
 .../service/impl/DataSourcePersistServiceTest.java |  9 ++++++
 .../infra/context/metadata/MetaDataContexts.java   |  8 +++++
 .../context/metadata/MetaDataContextsBuilder.java  |  6 ++--
 .../metadata/impl/StandardMetaDataContexts.java    | 13 +++++---
 .../metadata/MetaDataContextsBuilderTest.java      | 12 ++++---
 .../impl/StandardMetaDataContextsTest.java         |  5 +--
 .../core/datasource/ShardingSphereDataSource.java  |  7 +++-
 .../GovernanceShardingSphereDataSource.java        |  9 +++---
 .../internal/state/DriverStateContextTest.java     |  3 +-
 .../proxy/backend/context/ProxyContext.java        |  2 +-
 .../rdl/resource/AddResourceBackendHandler.java    | 13 ++------
 .../DatabaseCommunicationEngineFactoryTest.java    |  3 +-
 .../DatabaseCommunicationEngineTest.java           |  5 +--
 .../jdbc/connection/BackendConnectionTest.java     |  3 +-
 .../jdbc/datasource/JDBCBackendDataSourceTest.java |  3 +-
 .../context/BackendExecutorContextTest.java        |  3 +-
 .../proxy/backend/context/ProxyContextTest.java    | 11 ++++---
 .../DatabaseOperateBackendHandlerFactoryTest.java  |  5 +--
 .../mysql/executor/ShowDatabasesExecutorTest.java  |  3 +-
 .../mysql/executor/ShowTablesExecutorTest.java     |  3 +-
 .../mysql/executor/UseDatabaseExecutorTest.java    |  3 +-
 .../impl/BroadcastDatabaseBackendHandlerTest.java  |  3 +-
 .../SchemaAssignedDatabaseBackendHandlerTest.java  |  3 +-
 .../impl/UnicastDatabaseBackendHandlerTest.java    |  3 +-
 .../distsql/DistSQLBackendHandlerFactoryTest.java  | 30 ++++++++----------
 .../resource/AddResourceBackendHandlerTest.java    | 14 ++++----
 .../ShardingCTLExplainBackendHandlerTest.java      |  3 +-
 .../hint/ShardingCTLHintBackendHandlerTest.java    |  3 +-
 .../sctl/set/ShardingCTLSetBackendHandlerTest.java |  3 +-
 .../impl/AbstractBootstrapInitializer.java         |  2 +-
 .../FrontDatabaseProtocolTypeFactoryTest.java      |  7 ++--
 .../frontend/mysql/MySQLFrontendEngineTest.java    |  5 +--
 .../MySQLAuthenticationEngineTest.java             |  4 ++-
 .../MySQLAuthenticationHandlerTest.java            |  5 +--
 .../command/MySQLCommandExecutorFactoryTest.java   |  3 +-
 .../execute/MySQLComStmtExecuteExecutorTest.java   |  3 +-
 .../PostgreSQLAuthenticationEngineTest.java        | 10 +++---
 .../PostgreSQLAuthenticationHandlerTest.java       |  3 +-
 .../parse/PostgreSQLComParseExecutorTest.java      |  3 +-
 45 files changed, 172 insertions(+), 169 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 911a4c2..01bdeb8 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
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.governance.context.metadata;
 
 import com.google.common.collect.Maps;
 import com.google.common.eventbus.Subscribe;
+import lombok.Getter;
 import org.apache.shardingsphere.authority.rule.AuthorityRule;
 import 
org.apache.shardingsphere.governance.context.authority.listener.event.AuthorityChangedEvent;
 import 
org.apache.shardingsphere.governance.core.lock.ShardingSphereDistributeLock;
@@ -80,6 +81,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
     
     private volatile StandardMetaDataContexts metaDataContexts;
     
+    @Getter
     private final ConfigCenter configCenter;
     
     private final RegistryCenter registryCenter;
@@ -187,7 +189,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         ShardingSphereMetaData metaData = buildMetaData(event);
         metaDataMap.put(event.getSchemaName(), metaData);
         
metaDataContexts.getOptimizeContextFactory().getSchemaMetadatas().getSchemas().put(event.getSchemaName(),
 new FederateSchemaMetadata(event.getSchemaName(), 
metaData.getSchema().getTables()));
-        metaDataContexts = new StandardMetaDataContexts(metaDataMap, 
metaDataContexts.getGlobalRuleMetaData(), metaDataContexts.getExecutorEngine(),
+        metaDataContexts = new StandardMetaDataContexts(configCenter, 
metaDataMap, metaDataContexts.getGlobalRuleMetaData(), 
metaDataContexts.getExecutorEngine(),
                 metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
         configCenter.getSchemaMetaDataService().persist(event.getSchemaName(), 
metaDataContexts.getMetaDataMap().get(event.getSchemaName()).getSchema());
         ShardingSphereEventBus.getInstance().post(new 
DataSourceChangeCompletedEvent(event.getSchemaName(), 
@@ -204,7 +206,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         Map<String, ShardingSphereMetaData> metaDataMap = new 
HashMap<>(metaDataContexts.getMetaDataMap());
         metaDataMap.remove(event.getSchemaName());
         
metaDataContexts.getOptimizeContextFactory().getSchemaMetadatas().getSchemas().remove(event.getSchemaName());
-        metaDataContexts = new StandardMetaDataContexts(
+        metaDataContexts = new StandardMetaDataContexts(configCenter, 
                 metaDataMap, metaDataContexts.getGlobalRuleMetaData(), 
metaDataContexts.getExecutorEngine(), metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
         configCenter.getSchemaMetaDataService().delete(event.getSchemaName());
     }
@@ -217,8 +219,8 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
     @Subscribe
     public synchronized void renew(final PropertiesChangedEvent event) {
         ConfigurationProperties props = new 
ConfigurationProperties(event.getProps());
-        metaDataContexts = new 
StandardMetaDataContexts(metaDataContexts.getMetaDataMap(), 
metaDataContexts.getGlobalRuleMetaData(),
-                metaDataContexts.getExecutorEngine(), props, 
metaDataContexts.getOptimizeContextFactory());
+        metaDataContexts = new StandardMetaDataContexts(configCenter, 
+                metaDataContexts.getMetaDataMap(), 
metaDataContexts.getGlobalRuleMetaData(), metaDataContexts.getExecutorEngine(), 
props, metaDataContexts.getOptimizeContextFactory());
     }
     
     /**
@@ -249,8 +251,8 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
                 
metaDataContexts.getOptimizeContextFactory().getSchemaMetadatas().getSchemas().put(event.getSchemaName(),
                         new FederateSchemaMetadata(event.getSchemaName(), 
newMetaData.getSchema().getTables()));
             }
-            metaDataContexts = new StandardMetaDataContexts(newMetaDataMap, 
metaDataContexts.getGlobalRuleMetaData(), metaDataContexts.getExecutorEngine(),
-                    metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
+            metaDataContexts = new StandardMetaDataContexts(configCenter, 
+                    newMetaDataMap, metaDataContexts.getGlobalRuleMetaData(), 
metaDataContexts.getExecutorEngine(), metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
         } finally {
             ShardingSphereEventBus.getInstance().post(new 
InnerLockReleasedEvent(LockNameUtil.getMetadataRefreshLockName()));
         }
@@ -267,7 +269,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         String schemaName = event.getSchemaName();
         ShardingSphereMetaData metaData = 
getChangedMetaData(metaDataContexts.getMetaDataMap().get(schemaName), 
event.getRuleConfigurations());
         Map<String, ShardingSphereMetaData> newMetaDataMap = 
getNewMetaData(schemaName, metaData);
-        metaDataContexts = new StandardMetaDataContexts(newMetaDataMap, 
metaDataContexts.getGlobalRuleMetaData(), metaDataContexts.getExecutorEngine(),
+        metaDataContexts = new StandardMetaDataContexts(configCenter, 
newMetaDataMap, metaDataContexts.getGlobalRuleMetaData(), 
metaDataContexts.getExecutorEngine(),
                 metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
         configCenter.getSchemaMetaDataService().persist(schemaName, 
newMetaDataMap.get(schemaName).getSchema());
     }
@@ -283,8 +285,8 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         String schemaName = event.getSchemaName();
         ShardingSphereMetaData metaData = 
getChangedMetaData(metaDataContexts.getMetaDataMap().get(schemaName), 
event.getDataSourceConfigurations());
         Map<String, ShardingSphereMetaData> newMetaDataMap = 
getNewMetaData(schemaName, metaData);
-        metaDataContexts = new StandardMetaDataContexts(
-                newMetaDataMap, metaDataContexts.getGlobalRuleMetaData(), 
metaDataContexts.getExecutorEngine(), metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
+        metaDataContexts = new StandardMetaDataContexts(configCenter, 
newMetaDataMap, 
+                metaDataContexts.getGlobalRuleMetaData(), 
metaDataContexts.getExecutorEngine(), metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
         ShardingSphereEventBus.getInstance().post(new 
DataSourceChangeCompletedEvent(event.getSchemaName(),
                 
metaDataContexts.getMetaDataMap().get(event.getSchemaName()).getResource().getDatabaseType(),
 newMetaDataMap.get(event.getSchemaName()).getResource().getDataSources()));
     }
@@ -332,7 +334,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         if (!newGlobalConfigs.isEmpty()) {
             ShardingSphereRuleMetaData newGlobalRuleMetaData = new 
ShardingSphereRuleMetaData(newGlobalConfigs,
                     
ShardingSphereRulesBuilder.buildGlobalRules(newGlobalConfigs, 
metaDataContexts.getMetaDataMap()));
-            metaDataContexts = new 
StandardMetaDataContexts(metaDataContexts.getMetaDataMap(), 
newGlobalRuleMetaData, metaDataContexts.getExecutorEngine(),
+            metaDataContexts = new StandardMetaDataContexts(configCenter, 
metaDataContexts.getMetaDataMap(), newGlobalRuleMetaData, 
metaDataContexts.getExecutorEngine(),
                     metaDataContexts.getProps(), 
metaDataContexts.getOptimizeContextFactory());
         }
     }
@@ -361,7 +363,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
                 // TODO load global schema from reg center
                 configCenter.getGlobalRuleService().load(), 
                 metaDataContexts.getProps().getProps());
-        return 
metaDataContextsBuilder.build().getMetaDataMap().get(schemaName);
+        return 
metaDataContextsBuilder.build(configCenter).getMetaDataMap().get(schemaName);
     }
     
     private ShardingSphereMetaData getChangedMetaData(final 
ShardingSphereMetaData oldMetaData, final ShardingSphereSchema schema, final 
String schemaName) {
@@ -373,7 +375,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
         // TODO load global schema from reg center
         MetaDataContextsBuilder builder = new 
MetaDataContextsBuilder(Collections.singletonMap(oldMetaData.getName(), 
oldMetaData.getResource().getDataSources()),
                 Collections.singletonMap(oldMetaData.getName(), ruleConfigs), 
new LinkedList<>(), metaDataContexts.getProps().getProps());
-        return builder.build().getMetaDataMap().values().iterator().next();
+        return 
builder.build(configCenter).getMetaDataMap().values().iterator().next();
     }
     
     private ShardingSphereMetaData getChangedMetaData(final 
ShardingSphereMetaData oldMetaData, final Map<String, DataSourceConfiguration> 
newDataSourceConfigs) throws SQLException {
@@ -385,7 +387,7 @@ public final class GovernanceMetaDataContexts implements 
MetaDataContexts {
                 getNewDataSources(oldMetaData.getResource().getDataSources(), 
getAddedDataSources(oldMetaData, newDataSourceConfigs), modifiedDataSources, 
deletedDataSources));
         // TODO load global schema from reg center
         return new MetaDataContextsBuilder(dataSourcesMap, 
Collections.singletonMap(oldMetaData.getName(), 
oldMetaData.getRuleMetaData().getConfigurations()), new LinkedList<>(),
-                
metaDataContexts.getProps().getProps()).build().getMetaDataMap().get(oldMetaData.getName());
+                
metaDataContexts.getProps().getProps()).build(configCenter).getMetaDataMap().get(oldMetaData.getName());
     }
     
     private Map<String, DataSource> getNewDataSources(final Map<String, 
DataSource> oldDataSources, 
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 0afcd76..d6ba806 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
@@ -96,7 +96,7 @@ public final class GovernanceMetaDataContextsTest {
     
     @Before
     public void setUp() {
-        governanceMetaDataContexts = new GovernanceMetaDataContexts(new 
StandardMetaDataContexts(
+        governanceMetaDataContexts = new GovernanceMetaDataContexts(new 
StandardMetaDataContexts(mock(ConfigCenter.class), 
                 createMetaDataMap(), globalRuleMetaData, 
mock(ExecutorEngine.class), props, mockOptimizeContextFactory()), configCenter, 
registryCenter, mock(RegistryCenterRepository.class));
     }
     
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/event/datasource/DataSourceAddedSQLNotificationEvent.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/event/datasource/DataSourceAddedSQLNotificationEvent.java
deleted file mode 100644
index abff8c5..0000000
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/event/datasource/DataSourceAddedSQLNotificationEvent.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.config.event.datasource;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.governance.core.registry.SQLNotificationEvent;
-import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
-
-import java.util.Map;
-
-/**
- * Data source added SQL notification event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class DataSourceAddedSQLNotificationEvent implements 
SQLNotificationEvent {
-    
-    private final String schemaName;
-    
-    private final Map<String, DataSourceConfiguration> 
dataSourceConfigurations;
-}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriber.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriber.java
index 426a6b9..158d559 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriber.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriber.java
@@ -18,11 +18,10 @@
 package org.apache.shardingsphere.governance.core.registry.config.subscriber;
 
 import com.google.common.eventbus.Subscribe;
-import 
org.apache.shardingsphere.governance.core.registry.config.event.datasource.DataSourceAddedSQLNotificationEvent;
 import 
org.apache.shardingsphere.governance.core.registry.config.event.datasource.DataSourceDroppedSQLNotificationEvent;
-import 
org.apache.shardingsphere.infra.config.persist.service.impl.DataSourcePersistService;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import 
org.apache.shardingsphere.infra.config.persist.service.impl.DataSourcePersistService;
 import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 
 import java.util.Map;
@@ -40,18 +39,6 @@ public final class DataSourceRegistrySubscriber {
     }
     
     /**
-     * Update data source configurations for add.
-     *
-     * @param event data source added event
-     */
-    @Subscribe
-    public void update(final DataSourceAddedSQLNotificationEvent event) {
-        Map<String, DataSourceConfiguration> dataSourceConfigs = 
persistService.load(event.getSchemaName());
-        dataSourceConfigs.putAll(event.getDataSourceConfigurations());
-        persistService.persist(event.getSchemaName(), dataSourceConfigs);
-    }
-    
-    /**
      * Update data source configurations for drop.
      *
      * @param event data source dropped event
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriberTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriberTest.java
index 348888d..b6fcb96 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriberTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/config/subscriber/DataSourceRegistrySubscriberTest.java
@@ -17,11 +17,10 @@
 
 package org.apache.shardingsphere.governance.core.registry.config.subscriber;
 
-import 
org.apache.shardingsphere.governance.core.registry.config.event.datasource.DataSourceAddedSQLNotificationEvent;
 import 
org.apache.shardingsphere.governance.core.registry.config.event.datasource.DataSourceDroppedSQLNotificationEvent;
-import 
org.apache.shardingsphere.infra.config.persist.service.impl.DataSourcePersistService;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
+import 
org.apache.shardingsphere.infra.config.persist.service.impl.DataSourcePersistService;
 import org.apache.shardingsphere.test.mock.MockedDataSource;
 import org.junit.Before;
 import org.junit.Test;
@@ -59,14 +58,6 @@ public final class DataSourceRegistrySubscriberTest {
     }
     
     @Test
-    public void assertUpdateWithDataSourceAddedEvent() {
-        Map<String, DataSourceConfiguration> dataSourceConfigs = 
createDataSourceConfigurations();
-        DataSourceAddedSQLNotificationEvent event = new 
DataSourceAddedSQLNotificationEvent("foo_db", dataSourceConfigs);
-        dataSourceRegistrySubscriber.update(event);
-        verify(persistService).persist("foo_db", dataSourceConfigs);
-    }
-    
-    @Test
     public void assertUpdateWithDataSourceAlteredEvent() {
         DataSourceDroppedSQLNotificationEvent event = new 
DataSourceDroppedSQLNotificationEvent("foo_db", 
Collections.singletonList("ds_0"));
         Map<String, DataSourceConfiguration> dataSourceConfigs = 
createDataSourceConfigurations();
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistService.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistService.java
index bdd4151..5e04229 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistService.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistService.java
@@ -76,4 +76,16 @@ public final class DataSourcePersistService implements 
SchemaBasedPersistService
     public boolean isExisted(final String schemaName) {
         return 
!Strings.isNullOrEmpty(repository.get(SchemaMetadataNode.getMetadataDataSourcePath(schemaName)));
     }
+    
+    /**
+     * Append data source configurations.
+     * 
+     * @param schemaName schema name
+     * @param toBeAppendedDataSourceConfigs data source configurations to be 
appended
+     */
+    public void append(final String schemaName, final Map<String, 
DataSourceConfiguration> toBeAppendedDataSourceConfigs) {
+        Map<String, DataSourceConfiguration> dataSourceConfigs = 
load(schemaName);
+        dataSourceConfigs.putAll(toBeAppendedDataSourceConfigs);
+        persist(schemaName, dataSourceConfigs);
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistServiceTest.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistServiceTest.java
index c70470b..5874876 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistServiceTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/persist/service/impl/DataSourcePersistServiceTest.java
@@ -32,12 +32,14 @@ import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Map;
 import java.util.stream.Collectors;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -85,4 +87,11 @@ public final class DataSourcePersistServiceTest {
         result.setConnectionInitSqls(Arrays.asList("set names utf8mb4;", "set 
names utf8;"));
         return result;
     }
+    
+    @Test
+    public void assertAppend() {
+        when(repository.get("/metadata/foo_db/dataSources")).thenReturn("");
+        new DataSourcePersistService(repository).append("foo_db", 
Collections.emptyMap());
+        verify(repository).persist("/metadata/foo_db/dataSources", "{}\n");
+    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
index 9898f90..e6fad50 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContexts.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.context.metadata;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import org.apache.shardingsphere.infra.lock.ShardingSphereLock;
@@ -36,6 +37,13 @@ import java.util.Optional;
 public interface MetaDataContexts extends Closeable {
     
     /**
+     * Get config center.
+     * 
+     * @return config center
+     */
+    ConfigCenter getConfigCenter();
+    
+    /**
      * Get all schema names.
      * 
      * @return all schema names
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilder.java
index 3836384..e34e3d6 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilder.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.context.metadata;
 
 import org.apache.shardingsphere.infra.config.DatabaseAccessConfiguration;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -85,10 +86,11 @@ public final class MetaDataContextsBuilder {
     /**
      * Build meta data contexts.
      * 
+     * @param configCenter config center
      * @exception SQLException SQL exception
      * @return meta data contexts
      */
-    public StandardMetaDataContexts build() throws SQLException {
+    public StandardMetaDataContexts build(final ConfigCenter configCenter) 
throws SQLException {
         Map<String, ShardingSphereMetaData> metaDataMap = new 
HashMap<>(schemaRuleConfigs.size(), 1);
         Map<String, ShardingSphereMetaData> actualMetaDataMap = new 
HashMap<>(schemaRuleConfigs.size(), 1);
         for (String each : schemaRuleConfigs.keySet()) {
@@ -104,7 +106,7 @@ public final class MetaDataContextsBuilder {
             metaDataMap.put(each, new ShardingSphereMetaData(each, resource, 
ruleMetaData, buildSchema(tableMetaDatas)));
         }
         OptimizeContextFactory optimizeContextFactory = new 
OptimizeContextFactory(actualMetaDataMap);
-        return new StandardMetaDataContexts(metaDataMap, 
buildGlobalSchemaMetaData(metaDataMap), executorEngine, props, 
optimizeContextFactory);
+        return new StandardMetaDataContexts(configCenter, metaDataMap, 
buildGlobalSchemaMetaData(metaDataMap), executorEngine, props, 
optimizeContextFactory);
     }
     
     private ShardingSphereSchema buildSchema(final Map<TableMetaData, 
TableMetaData> tableMetaDatas) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
index d616ff6..d339f5f 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContexts.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.context.metadata.impl;
 
 import lombok.Getter;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.database.DefaultSchema;
@@ -30,9 +31,9 @@ import org.apache.shardingsphere.infra.state.StateContext;
 
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.HashMap;
 import java.util.Optional;
 import java.util.Properties;
 
@@ -42,6 +43,9 @@ import java.util.Properties;
 @Getter
 public final class StandardMetaDataContexts implements MetaDataContexts {
     
+    @Getter
+    private final ConfigCenter configCenter;
+    
     private final Map<String, ShardingSphereMetaData> metaDataMap;
     
     private final ShardingSphereRuleMetaData globalRuleMetaData;
@@ -54,13 +58,14 @@ public final class StandardMetaDataContexts implements 
MetaDataContexts {
     
     private final StateContext stateContext;
     
-    public StandardMetaDataContexts() {
-        this(new LinkedHashMap<>(), new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.emptyList()),
+    public StandardMetaDataContexts(final ConfigCenter configCenter) {
+        this(configCenter, new LinkedHashMap<>(), new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.emptyList()),
                 null, new ConfigurationProperties(new Properties()), new 
OptimizeContextFactory(new HashMap<>()));
     }
     
-    public StandardMetaDataContexts(final Map<String, ShardingSphereMetaData> 
metaDataMap, final ShardingSphereRuleMetaData globalRuleMetaData,
+    public StandardMetaDataContexts(final ConfigCenter configCenter, final 
Map<String, ShardingSphereMetaData> metaDataMap, final 
ShardingSphereRuleMetaData globalRuleMetaData,
                                     final ExecutorEngine executorEngine, final 
ConfigurationProperties props, final OptimizeContextFactory 
optimizeContextFactory) {
+        this.configCenter = configCenter;
         this.metaDataMap = new LinkedHashMap<>(metaDataMap);
         this.globalRuleMetaData = globalRuleMetaData;
         this.executorEngine = executorEngine;
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilderTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilderTest.java
index 7a2f14c..dadf66e 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilderTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/MetaDataContextsBuilderTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.context.metadata;
 
 import com.google.common.collect.Lists;
 import 
org.apache.shardingsphere.authority.api.config.AuthorityRuleConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.fixture.FixtureRule;
 import 
org.apache.shardingsphere.infra.context.fixture.FixtureRuleConfiguration;
@@ -40,13 +41,14 @@ import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
 
 @RunWith(MockitoJUnitRunner.class)
 public final class MetaDataContextsBuilderTest {
     
     @Test
     public void assertBuildWithoutConfiguration() throws SQLException {
-        MetaDataContexts actual = new 
MetaDataContextsBuilder(Collections.emptyMap(), Collections.emptyMap(), 
null).build();
+        MetaDataContexts actual = new 
MetaDataContextsBuilder(Collections.emptyMap(), Collections.emptyMap(), 
null).build(mock(ConfigCenter.class));
         assertTrue(actual.getAllSchemaNames().isEmpty());
         assertTrue(actual.getProps().getProps().isEmpty());
     }
@@ -55,8 +57,8 @@ public final class MetaDataContextsBuilderTest {
     public void assertBuildWithConfigurationsButWithoutDataSource() throws 
SQLException {
         Properties props = new Properties();
         props.setProperty(ConfigurationPropertyKey.EXECUTOR_SIZE.getKey(), 
"1");
-        MetaDataContexts actual = new MetaDataContextsBuilder(
-                Collections.singletonMap("logic_db", Collections.emptyMap()), 
Collections.singletonMap("logic_db", Lists.newArrayList(new 
FixtureRuleConfiguration())), props).build();
+        MetaDataContexts actual = new 
MetaDataContextsBuilder(Collections.singletonMap("logic_db", 
Collections.emptyMap()), 
+                Collections.singletonMap("logic_db", Lists.newArrayList(new 
FixtureRuleConfiguration())), props).build(mock(ConfigCenter.class));
         assertRules(actual);
         
assertTrue(actual.getMetaData("logic_db").getResource().getDataSources().isEmpty());
         assertThat(actual.getProps().getProps().size(), is(1));
@@ -68,7 +70,7 @@ public final class MetaDataContextsBuilderTest {
         Properties props = new Properties();
         props.setProperty(ConfigurationPropertyKey.EXECUTOR_SIZE.getKey(), 
"1");
         MetaDataContexts actual = new 
MetaDataContextsBuilder(Collections.singletonMap("logic_db", 
Collections.singletonMap("ds", new MockedDataSource())),
-                Collections.singletonMap("logic_db", Lists.newArrayList(new 
FixtureRuleConfiguration())), props).build();
+                Collections.singletonMap("logic_db", Lists.newArrayList(new 
FixtureRuleConfiguration())), props).build(mock(ConfigCenter.class));
         assertRules(actual);
         assertDataSources(actual);
         assertThat(actual.getProps().getProps().size(), is(1));
@@ -84,7 +86,7 @@ public final class MetaDataContextsBuilderTest {
 
         MetaDataContexts actual = new MetaDataContextsBuilder(
                 Collections.singletonMap("logic_db", Collections.emptyMap()), 
Collections.singletonMap("logic_db",
-                Lists.newArrayList(new FixtureRuleConfiguration())), 
Collections.singleton(authorityRuleConfig), props).build();
+                Lists.newArrayList(new FixtureRuleConfiguration())), 
Collections.singleton(authorityRuleConfig), 
props).build(mock(ConfigCenter.class));
         assertRules(actual);
         
assertTrue(actual.getMetaData("logic_db").getResource().getDataSources().isEmpty());
         assertThat(actual.getProps().getProps().size(), is(1));
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContextsTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContextsTest.java
index 1a872bf..3727ee1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContextsTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/metadata/impl/StandardMetaDataContextsTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.context.metadata.impl;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.DefaultSchema;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -49,7 +50,7 @@ public final class StandardMetaDataContextsTest {
     @Test
     public void assertGetDefaultMetaData() {
         ShardingSphereMetaData metaData = getShardingSphereMetaData();
-        StandardMetaDataContexts standardMetaDataContexts = new 
StandardMetaDataContexts(Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
metaData), 
+        StandardMetaDataContexts standardMetaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class), 
Collections.singletonMap(DefaultSchema.LOGIC_NAME, metaData), 
                 mock(ShardingSphereRuleMetaData.class), null, new 
ConfigurationProperties(new Properties()), optimizeContextFactory);
         assertThat(standardMetaDataContexts.getDefaultMetaData(), 
is(metaData));
     }
@@ -58,7 +59,7 @@ public final class StandardMetaDataContextsTest {
     public void assertClose() {
         ExecutorEngine executorEngine = mock(ExecutorEngine.class);
         ShardingSphereMetaData metaData = getShardingSphereMetaData();
-        StandardMetaDataContexts standardMetaDataContexts = new 
StandardMetaDataContexts(Collections.singletonMap("logic_db", metaData), 
+        StandardMetaDataContexts standardMetaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class), 
Collections.singletonMap("logic_db", metaData), 
                 mock(ShardingSphereRuleMetaData.class), executorEngine, new 
ConfigurationProperties(new Properties()), optimizeContextFactory);
         standardMetaDataContexts.close();
         verify(executorEngine).close();
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
index 9a74c77..ed1ded7 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
@@ -22,6 +22,9 @@ import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import 
org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationDataSource;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
+import 
org.apache.shardingsphere.infra.config.persist.repository.ConfigCenterRepository;
+import 
org.apache.shardingsphere.infra.config.persist.repository.LocalConfigCenterRepository;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.MetaDataContextsBuilder;
@@ -51,8 +54,10 @@ public final class ShardingSphereDataSource extends 
AbstractUnsupportedOperation
     private final TransactionContexts transactionContexts;
     
     public ShardingSphereDataSource(final Map<String, DataSource> 
dataSourceMap, final Collection<RuleConfiguration> configurations, final 
Properties props) throws SQLException {
+        // TODO load from SPI
+        ConfigCenterRepository repository = new LocalConfigCenterRepository();
         metaDataContexts = new MetaDataContextsBuilder(
-                Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
dataSourceMap), Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
configurations), props).build();
+                Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
dataSourceMap), Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
configurations), props).build(new ConfigCenter(repository));
         String xaTransactionMangerType = 
metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
         transactionContexts = 
createTransactionContexts(metaDataContexts.getDefaultMetaData().getResource().getDatabaseType(),
 dataSourceMap, xaTransactionMangerType);
     }
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 72b5982..bafb8a7 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
@@ -80,7 +80,7 @@ public final class GovernanceShardingSphereDataSource extends 
AbstractUnsupporte
         repository = 
RegistryCenterRepositoryFactory.newInstance(governanceConfig);
         ConfigCenter configCenter = new ConfigCenter(repository);
         RegistryCenter registryCenter = new RegistryCenter(repository);
-        metaDataContexts = new 
GovernanceMetaDataContexts(createMetaDataContexts(dataSourceMap, ruleConfigs, 
props), configCenter, registryCenter, repository);
+        metaDataContexts = new 
GovernanceMetaDataContexts(createMetaDataContexts(configCenter, dataSourceMap, 
ruleConfigs, props), configCenter, registryCenter, repository);
         String xaTransactionMangerType = 
metaDataContexts.getProps().getValue(ConfigurationPropertyKey.XA_TRANSACTION_MANAGER_TYPE);
         transactionContexts = 
createTransactionContexts(metaDataContexts.getDefaultMetaData().getResource().getDatabaseType(),
                 
metaDataContexts.getDefaultMetaData().getResource().getDataSources(), 
xaTransactionMangerType);
@@ -93,13 +93,14 @@ public final class GovernanceShardingSphereDataSource 
extends AbstractUnsupporte
         Map<String, DataSource> dataSourceMap = 
DataSourceConverter.getDataSourceMap(dataSourceConfigs);
         MetaDataContextsBuilder metaDataContextsBuilder = new 
MetaDataContextsBuilder(Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
dataSourceMap), 
                 Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
ruleConfigurations), configCenter.getGlobalRuleService().load(), 
configCenter.getPropsService().load());
-        return metaDataContextsBuilder.build();
+        return metaDataContextsBuilder.build(configCenter);
     }
     
-    private StandardMetaDataContexts createMetaDataContexts(final Map<String, 
DataSource> dataSourceMap, final Collection<RuleConfiguration> ruleConfigs, 
final Properties props) throws SQLException {
+    private StandardMetaDataContexts createMetaDataContexts(final ConfigCenter 
configCenter, 
+                                                            final Map<String, 
DataSource> dataSourceMap, final Collection<RuleConfiguration> ruleConfigs, 
final Properties props) throws SQLException {
         MetaDataContextsBuilder metaDataContextsBuilder = new 
MetaDataContextsBuilder(
                 Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
dataSourceMap), Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
ruleConfigs), props);
-        return metaDataContextsBuilder.build();
+        return metaDataContextsBuilder.build(configCenter);
     }
     
     private TransactionContexts createTransactionContexts(final DatabaseType 
databaseType, final Map<String, DataSource> dataSourceMap, final String 
xaTransactionMangerType) {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/state/DriverStateContextTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/state/DriverStateContextTest.java
index 52af438..b664ab7 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/state/DriverStateContextTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/state/DriverStateContextTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.driver.governance.internal.state;
 
 import 
org.apache.shardingsphere.driver.governance.internal.circuit.connection.CircuitBreakerConnection;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.state.StateEvent;
@@ -38,7 +39,7 @@ import static org.mockito.Mockito.mock;
 
 public final class DriverStateContextTest {
     
-    private MetaDataContexts metaDataContexts = new StandardMetaDataContexts();
+    private MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class));
     
     @Test
     public void assertGetConnectionWithOkState() {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
index a28a42c..03c3872 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
@@ -52,7 +52,7 @@ public final class ProxyContext {
     
     private ProxyContext() {
         backendDataSource = new JDBCBackendDataSource();
-        metaDataContexts = new StandardMetaDataContexts();
+        metaDataContexts = new StandardMetaDataContexts(null);
         transactionContexts = new StandardTransactionContexts();
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandler.java
index 3d7b8b3..2c0ecbd 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandler.java
@@ -19,11 +19,9 @@ package 
org.apache.shardingsphere.proxy.backend.text.distsql.rdl.resource;
 
 import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.create.AddResourceStatement;
-import 
org.apache.shardingsphere.governance.core.registry.config.event.datasource.DataSourceAddedSQLNotificationEvent;
 import 
org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceValidator;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
 import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
 import 
org.apache.shardingsphere.infra.distsql.exception.resource.DuplicateResourceException;
 import 
org.apache.shardingsphere.infra.distsql.exception.resource.InvalidResourceException;
@@ -62,14 +60,14 @@ public final class AddResourceBackendHandler extends 
SchemaRequiredBackendHandle
     @Override
     public ResponseHeader execute(final String schemaName, final 
AddResourceStatement sqlStatement) throws DistSQLException {
         check(schemaName, sqlStatement);
-        Map<String, DataSourceConfiguration> dataSourceConfigMap = 
DataSourceParameterConverter.getDataSourceConfigurationMap(
+        Map<String, DataSourceConfiguration> dataSourceConfigs = 
DataSourceParameterConverter.getDataSourceConfigurationMap(
                 
DataSourceParameterConverter.getDataSourceParameterMapFromYamlConfiguration(AddResourcesStatementConverter.convert(databaseType,
 sqlStatement)));
-        Collection<String> invalidDataSourceNames = 
dataSourceConfigMap.entrySet()
+        Collection<String> invalidDataSourceNames = 
dataSourceConfigs.entrySet()
                 .stream().filter(entry -> 
!dataSourceValidator.validate(entry.getValue())).map(Entry::getKey).collect(Collectors.toList());
         if (!invalidDataSourceNames.isEmpty()) {
             throw new InvalidResourceException(invalidDataSourceNames);
         }
-        post(schemaName, dataSourceConfigMap);
+        
ProxyContext.getInstance().getMetaDataContexts().getConfigCenter().getDataSourceService().append(schemaName,
 dataSourceConfigs);
         return new UpdateResponseHeader(sqlStatement);
     }
     
@@ -86,9 +84,4 @@ public final class AddResourceBackendHandler extends 
SchemaRequiredBackendHandle
             throw new DuplicateResourceException(duplicateDataSourceNames);
         }
     }
-    
-    private void post(final String schemaName, final Map<String, 
DataSourceConfiguration> dataSources) {
-        // TODO Need to get the executed feedback from registry center for 
returning.
-        ShardingSphereEventBus.getInstance().post(new 
DataSourceAddedSQLNotificationEvent(schemaName, dataSources));
-    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactoryTest.java
index 4414fb5..ae4b4be 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactoryTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.communication;
 
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
@@ -50,7 +51,7 @@ public final class DatabaseCommunicationEngineFactoryTest {
     public void setUp() throws IllegalAccessException, NoSuchFieldException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new ConfigurationProperties(new 
Properties()), getOptimizeContextFactory()));
         BackendConnection backendConnection = mock(BackendConnection.class, 
RETURNS_DEEP_STUBS);
         when(backendConnection.getSchemaName()).thenReturn("schema");
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineTest.java
index b68d083..eff67cc 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.communication;
 
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -57,9 +58,9 @@ import java.sql.Statement;
 import java.sql.Types;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.HashMap;
 import java.util.Optional;
 import java.util.Properties;
 
@@ -90,7 +91,7 @@ public final class DatabaseCommunicationEngineTest {
     @Before
     public void setUp() {
         when(backendConnection.getSchemaName()).thenReturn("schema");
-        MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mockMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class),
+        MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class), mockMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class),
                 new ConfigurationProperties(new Properties()), 
mockOptimizeContextFactory());
         ProxyContext.getInstance().init(metaDataContexts, new 
StandardTransactionContexts());
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
index e52e9b3..6a4aea7 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/BackendConnectionTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection;
 
 import com.google.common.collect.Multimap;
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -101,7 +102,7 @@ public final class BackendConnectionTest {
     private void setMetaDataContexts() throws ReflectiveOperationException {
         Field field = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         field.setAccessible(true);
-        field.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(createMetaDataMap(), 
+        field.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), createMetaDataMap(), 
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
index 9907f00..14f0254 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource;
 
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
@@ -74,7 +75,7 @@ public final class JDBCBackendDataSourceTest {
     private void setMetaDataContexts() {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(createMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), createMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new ConfigurationProperties(new 
Properties()), mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
index 9236a37..bf5a71c 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/BackendExecutorContextTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.context;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -38,7 +39,7 @@ public final class BackendExecutorContextTest {
     
     @Before
     public void setUp() {
-        MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(Collections.emptyMap(), 
mock(ShardingSphereRuleMetaData.class), 
+        MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class), Collections.emptyMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new ConfigurationProperties(new 
Properties()), mock(OptimizeContextFactory.class));
         ProxyContext.getInstance().init(metaDataContexts, new 
StandardTransactionContexts());
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
index 0984b99..39cc416 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/context/ProxyContextTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.context;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -35,10 +36,10 @@ import org.junit.Test;
 import javax.sql.DataSource;
 import java.lang.reflect.Field;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
-import java.util.HashMap;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -70,7 +71,7 @@ public final class ProxyContextTest {
         Map<String, ShardingSphereMetaData> metaDataMap = 
mockMetaDataMap(Collections.emptyMap());
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(metaDataMap, mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap, 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         assertTrue(ProxyContext.getInstance().schemaExists("schema"));
         assertFalse(ProxyContext.getInstance().schemaExists("schema_2"));
@@ -91,7 +92,7 @@ public final class ProxyContextTest {
         Map<String, ShardingSphereMetaData> metaDataMap = 
mockMetaDataMap(Collections.emptyMap());
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(metaDataMap, mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap, 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         ProxyContext.getInstance().getMetaData("schema1");
     }
@@ -101,7 +102,7 @@ public final class ProxyContextTest {
         Map<String, ShardingSphereMetaData> metaDataMap = 
mockMetaDataMap(Collections.emptyMap());
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(metaDataMap, mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap, 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         assertThat(metaDataMap.get("schema"), 
is(ProxyContext.getInstance().getMetaData("schema")));
     }
@@ -111,7 +112,7 @@ public final class ProxyContextTest {
         Map<String, ShardingSphereMetaData> metaDataMap = createMetaDataMap();
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(metaDataMap, mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap, 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         assertThat(new 
LinkedHashSet<>(ProxyContext.getInstance().getAllSchemaNames()), 
is(metaDataMap.keySet()));
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseOperateBackendHandlerFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseOperateBackendHandlerFactoryTest.java
index d6db83c..27a4e4f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseOperateBackendHandlerFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseOperateBackendHandlerFactoryTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.text.admin;
 
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -63,7 +64,7 @@ public final class DatabaseOperateBackendHandlerFactoryTest {
     public void setUp() throws IllegalAccessException, NoSuchFieldException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
@@ -162,7 +163,7 @@ public final class DatabaseOperateBackendHandlerFactoryTest 
{
             
when(mockedMetaDataContexts.getMetaData("schema")).thenReturn(metaData);
             metaDataContexts.set(ProxyContext.getInstance(), 
mockedMetaDataContexts);
         } else {
-            metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts());
+            metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class)));
         }
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
index 500aa82..dbdfb70 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -57,7 +58,7 @@ public final class ShowDatabasesExecutorTest {
         showDatabasesExecutor = new ShowDatabasesExecutor();
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new ConfigurationProperties(new 
Properties()), mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
index 0b85e9b..6c45cdf 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowTablesExecutorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -54,7 +55,7 @@ public final class ShowTablesExecutorTest {
         Map<String, ShardingSphereMetaData> metaDataMap = getMetaDataMap();
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(metaDataMap, mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap, 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
index 9776069..221e2c7 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/UseDatabaseExecutorTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.text.admin.mysql.executor;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
@@ -56,7 +57,7 @@ public final class UseDatabaseExecutorTest {
         backendConnection = mock(BackendConnection.class);
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/BroadcastDatabaseBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/BroadcastDatabaseBackendHandlerTest.java
index 7278ead..0a3d8d0 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/BroadcastDatabaseBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/BroadcastDatabaseBackendHandlerTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.text.data.impl;
 
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -76,7 +77,7 @@ public final class BroadcastDatabaseBackendHandlerTest {
     public void setUp() throws IllegalAccessException, NoSuchFieldException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new ConfigurationProperties(new 
Properties()), mock(OptimizeContextFactory.class)));
         
when(backendConnection.getSchemaName()).thenReturn(String.format(SCHEMA_PATTERN,
 0));
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
index fc3c9cb..a65c112 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/SchemaAssignedDatabaseBackendHandlerTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.text.data.impl;
 
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
@@ -77,7 +78,7 @@ public final class SchemaAssignedDatabaseBackendHandlerTest {
     public void setUp() throws IllegalAccessException, NoSuchFieldException, 
SQLException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         
when(backendConnection.getSchemaName()).thenReturn(String.format(SCHEMA_PATTERN,
 0));
         mockDatabaseCommunicationEngine(new 
UpdateResponseHeader(mock(SQLStatement.class)));
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
index 061f1ec..35e01a8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/data/impl/UnicastDatabaseBackendHandlerTest.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.proxy.backend.text.data.impl;
 
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.H2DatabaseType;
@@ -77,7 +78,7 @@ public final class UnicastDatabaseBackendHandlerTest {
     public void setUp() throws IllegalAccessException, NoSuchFieldException, 
SQLException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         
when(backendConnection.getSchemaName()).thenReturn(String.format(SCHEMA_PATTERN,
 0));
         mockDatabaseCommunicationEngine(new 
UpdateResponseHeader(mock(SQLStatement.class)));
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
index 7096aae..1f71c7d 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/DistSQLBackendHandlerFactoryTest.java
@@ -17,11 +17,11 @@
 
 package org.apache.shardingsphere.proxy.backend.text.distsql;
 
-import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.RuleDefinitionStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.create.AddResourceStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropResourceStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -42,6 +42,7 @@ import 
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.Alt
 import 
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.CreateReadwriteSplittingRuleStatement;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.DropReadwriteSplittingRuleStatement;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardingTableRuleStatement;
+import org.apache.shardingsphere.transaction.context.TransactionContexts;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -67,7 +68,7 @@ public final class DistSQLBackendHandlerFactoryTest {
     public void setUp() throws IllegalAccessException, NoSuchFieldException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
@@ -175,22 +176,17 @@ public final class DistSQLBackendHandlerFactoryTest {
         assertThat(response, instanceOf(QueryResponseHeader.class));
     }
     
-    @SneakyThrows(ReflectiveOperationException.class)
     private void setGovernanceMetaDataContexts(final boolean isGovernance) {
-        Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
-        metaDataContexts.setAccessible(true);
-        if (isGovernance) {
-            MetaDataContexts mockedMetaDataContexts = 
mock(MetaDataContexts.class);
-            
when(mockedMetaDataContexts.getAllSchemaNames()).thenReturn(Collections.singletonList("schema"));
-            ShardingSphereMetaData metaData = 
mock(ShardingSphereMetaData.class, RETURNS_DEEP_STUBS);
-            when(metaData.getResource().getDatabaseType()).thenReturn(new 
MySQLDatabaseType());
-            
when(metaData.getResource().getDataSources()).thenReturn(Collections.emptyMap());
-            
when(metaData.getResource().getNotExistedResources(any())).thenReturn(Collections.emptyList());
-            
when(mockedMetaDataContexts.getMetaData("schema")).thenReturn(metaData);
-            metaDataContexts.set(ProxyContext.getInstance(), 
mockedMetaDataContexts);
-        } else {
-            metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts());
-        }
+        ProxyContext.getInstance().init(isGovernance ? mockMetaDataContexts() 
: new StandardMetaDataContexts(mock(ConfigCenter.class)), 
mock(TransactionContexts.class));
+    }
+    
+    private MetaDataContexts mockMetaDataContexts() {
+        MetaDataContexts result = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
+        
when(result.getAllSchemaNames()).thenReturn(Collections.singletonList("schema"));
+        
when(result.getMetaData("schema").getResource().getDatabaseType()).thenReturn(new
 MySQLDatabaseType());
+        
when(result.getMetaData("schema").getResource().getDataSources()).thenReturn(Collections.emptyMap());
+        
when(result.getMetaData("schema").getResource().getNotExistedResources(any())).thenReturn(Collections.emptyList());
+        return result;
     }
     
     @After
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandlerTest.java
index 70896e4..7f399bd 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/resource/AddResourceBackendHandlerTest.java
@@ -34,6 +34,7 @@ import 
org.apache.shardingsphere.transaction.context.TransactionContexts;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -44,7 +45,6 @@ import java.util.Properties;
 
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -59,17 +59,17 @@ public final class AddResourceBackendHandlerTest {
     @Mock
     private BackendConnection backendConnection;
     
-    @Mock
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private MetaDataContexts metaDataContexts;
     
     @Mock
     private TransactionContexts transactionContexts;
     
     @Mock
-    private ShardingSphereMetaData shardingSphereMetaData;
+    private ShardingSphereMetaData metaData;
     
     @Mock
-    private ShardingSphereResource shardingSphereResource;
+    private ShardingSphereResource resource;
     
     private AddResourceBackendHandler addResourceBackendHandler;
     
@@ -85,9 +85,9 @@ public final class AddResourceBackendHandlerTest {
     public void assertExecute() throws DistSQLException {
         ProxyContext.getInstance().init(metaDataContexts, transactionContexts);
         
when(metaDataContexts.getAllSchemaNames()).thenReturn(Collections.singleton("test"));
-        
when(metaDataContexts.getMetaData(eq("test"))).thenReturn(shardingSphereMetaData);
-        
when(shardingSphereMetaData.getResource()).thenReturn(shardingSphereResource);
-        when(shardingSphereResource.getDataSources()).thenReturn(new 
HashMap<>());
+        when(metaDataContexts.getMetaData("test")).thenReturn(metaData);
+        when(metaData.getResource()).thenReturn(resource);
+        when(resource.getDataSources()).thenReturn(new HashMap<>());
         
when(dataSourceValidator.validate(any(DataSourceConfiguration.class))).thenReturn(true);
         ResponseHeader responseHeader = 
addResourceBackendHandler.execute("test", createAddResourceStatement());
         assertTrue(responseHeader instanceof UpdateResponseHeader);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
index d1ea933..f62ffae 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
@@ -1,5 +1,6 @@
 package org.apache.shardingsphere.proxy.backend.text.sctl.explain;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -61,7 +62,7 @@ public final class ShardingCTLExplainBackendHandlerTest {
         handler = new ShardingCTLExplainBackendHandler("sctl:explain select 
1", connection);
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(),
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(),
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandlerTest.java
index 65b058d..2057281 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/hint/ShardingCTLHintBackendHandlerTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.backend.text.sctl.hint;
 
 import com.google.common.collect.ImmutableMap;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
@@ -167,7 +168,7 @@ public final class ShardingCTLHintBackendHandlerTest {
         metaDataContexts.setAccessible(true);
         Properties props = new Properties();
         
props.setProperty(ConfigurationPropertyKey.PROXY_HINT_ENABLED.getKey(), 
Boolean.TRUE.toString());
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), 
                 mock(ExecutorEngine.class), new 
ConfigurationProperties(props), mock(OptimizeContextFactory.class)));
         String sql = "sctl:hint show table status";
         ShardingCTLHintBackendHandler defaultHintBackendHandler = new 
ShardingCTLHintBackendHandler(sql, backendConnection);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/set/ShardingCTLSetBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/set/ShardingCTLSetBackendHandlerTest.java
index 35ebc9f..502c65a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/set/ShardingCTLSetBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/set/ShardingCTLSetBackendHandlerTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.text.sctl.set;
 
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -58,7 +59,7 @@ public final class ShardingCTLSetBackendHandlerTest {
     public void setUp() throws NoSuchFieldException, IllegalAccessException {
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), 
                 new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
index 570daeb..ec61d58 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/impl/AbstractBootstrapInitializer.java
@@ -89,7 +89,7 @@ public abstract class AbstractBootstrapInitializer implements 
BootstrapInitializ
         Map<String, Map<String, DataSource>> dataSourcesMap = 
createDataSourcesMap(proxyConfig.getSchemaDataSources());
         MetaDataContextsBuilder metaDataContextsBuilder = new 
MetaDataContextsBuilder(
                 dataSourcesMap, proxyConfig.getSchemaRules(), 
proxyConfig.getGlobalRules(), proxyConfig.getProps());
-        return metaDataContextsBuilder.build();
+        return metaDataContextsBuilder.build(configCenter);
     }
     
     private static Map<String, Map<String, DataSource>> 
createDataSourcesMap(final Map<String, Map<String, DataSourceParameter>> 
schemaDataSources) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
index 826b503..bf834d8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.frontend.protocol;
 
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -49,7 +50,7 @@ public final class FrontDatabaseProtocolTypeFactoryTest {
     
     @Test
     public void 
assertGetDatabaseTypeWhenThrowShardingSphereConfigurationException() {
-        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(
+        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class),
                 Collections.emptyMap(), 
mock(ShardingSphereRuleMetaData.class), mock(ExecutorEngine.class), new 
ConfigurationProperties(new Properties()), mock(OptimizeContextFactory.class));
         setMetaDataContexts(metaDataContexts);
         assertTrue(metaDataContexts.getMetaDataMap().isEmpty());
@@ -58,7 +59,7 @@ public final class FrontDatabaseProtocolTypeFactoryTest {
     
     @Test
     public void 
assertGetDatabaseTypeInstanceOfMySQLDatabaseTypeFromMetaDataContextsSchemaName()
 {
-        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(
+        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class),
                 mockMetaDataMap(), mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class));
         setMetaDataContexts(metaDataContexts);
         assertFalse(metaDataContexts.getMetaDataMap().isEmpty());
@@ -74,7 +75,7 @@ public final class FrontDatabaseProtocolTypeFactoryTest {
     public void 
assertGetDatabaseTypeOfPostgreSQLDatabaseTypeFromMetaDataContextsProps() {
         Properties props = new Properties();
         
props.setProperty(ConfigurationPropertyKey.PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE.getKey(),
 "PostgreSQL");
-        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(
+        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class),
                 mockMetaDataMap(), mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(props), 
mock(OptimizeContextFactory.class));
         setMetaDataContexts(metaDataContexts);
         assertFalse(metaDataContexts.getMetaDataMap().isEmpty());
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
index ca4258e..8cb41c8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/MySQLFrontendEngineTest.java
@@ -29,14 +29,15 @@ import 
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLOKPacket;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.handshake.MySQLHandshakePacket;
 import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.metadata.user.ShardingSphereUser;
 import org.apache.shardingsphere.infra.optimize.context.OptimizeContextFactory;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.frontend.authentication.AuthenticationResult;
@@ -164,7 +165,7 @@ public final class MySQLFrontendEngineTest {
     }
     
     private MetaDataContexts getMetaDataContexts(final ShardingSphereUser 
user) {
-        return new StandardMetaDataContexts(getMetaDataMap(),
+        return new StandardMetaDataContexts(mock(ConfigCenter.class), 
getMetaDataMap(),
                 buildGlobalRuleMetaData(user), mock(ExecutorEngine.class), new 
ConfigurationProperties(new Properties()), mock(OptimizeContextFactory.class));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
index 0677ed6..8dedf7f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationEngineTest.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLErrPacket
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLOKPacket;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.handshake.MySQLHandshakePacket;
 import org.apache.shardingsphere.db.protocol.mysql.payload.MySQLPacketPayload;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -154,7 +155,8 @@ public final class MySQLAuthenticationEngineTest {
     private void setMetaDataContexts() throws NoSuchFieldException, 
IllegalAccessException {
         Field field = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         field.setAccessible(true);
-        field.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(Collections.singletonMap("sharding_db", 
mockShardingSphereMetaData()), mock(ShardingSphereRuleMetaData.class),
+        field.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), 
+                Collections.singletonMap("sharding_db", 
mockShardingSphereMetaData()), mock(ShardingSphereRuleMetaData.class),
                 mock(ExecutorEngine.class), new ConfigurationProperties(new 
Properties()), mock(OptimizeContextFactory.class)));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationHandlerTest.java
index f288445..62d1f58 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/authentication/MySQLAuthenticationHandlerTest.java
@@ -26,11 +26,12 @@ import 
org.apache.shardingsphere.authority.rule.builder.AuthorityRuleBuilder;
 import 
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLServerErrorCode;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.handshake.MySQLAuthPluginData;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
-import org.apache.shardingsphere.infra.executor.check.SQLChecker;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.executor.check.SQLChecker;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
@@ -139,7 +140,7 @@ public final class MySQLAuthenticationHandlerTest {
     }
     
     private MetaDataContexts getMetaDataContexts(final ShardingSphereUser 
user) {
-        return new StandardMetaDataContexts(getMetaDataMap(),
+        return new StandardMetaDataContexts(mock(ConfigCenter.class), 
getMetaDataMap(),
                 buildGlobalRuleMetaData(user), mock(ExecutorEngine.class), new 
ConfigurationProperties(new Properties()), mock(OptimizeContextFactory.class));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
index 815ab67..f70a816 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
@@ -26,6 +26,7 @@ import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.r
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.text.fieldlist.MySQLComFieldListPacket;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.text.query.MySQLComQueryPacket;
 import org.apache.shardingsphere.db.protocol.packet.CommandPacket;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -80,7 +81,7 @@ public final class MySQLCommandExecutorFactoryTest {
         field.setAccessible(true);
         ShardingSphereMetaData metaData = mockShardingSphereMetaData();
         Map<String, ShardingSphereMetaData> metaDataMap = 
Collections.singletonMap("logic_db", metaData);
-        MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(metaDataMap,
+        MetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap,
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mockOptimizeContextFactory());
         field.set(ProxyContext.getInstance(), metaDataContexts);
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
index 8ae0dd0..e37b5a7 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
@@ -18,6 +18,7 @@
 package 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute;
 
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.execute.MySQLComStmtExecutePacket;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -66,7 +67,7 @@ public final class MySQLComStmtExecuteExecutorTest {
         field.setAccessible(true);
         ShardingSphereMetaData metaData = mockShardingSphereMetaData();
         Map<String, ShardingSphereMetaData> metaDataMap = 
Collections.singletonMap("logic_db", metaData);
-        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(metaDataMap,
+        StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(mock(ConfigCenter.class), metaDataMap,
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mockOptimizeContextFactory());
         field.set(ProxyContext.getInstance(), metaDataContexts);
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
index 009b23c..01edcb8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationEngineTest.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.db.protocol.payload.PacketPayload;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLAuthenticationMD5PasswordPacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
@@ -136,17 +137,16 @@ public final class PostgreSQLAuthenticationEngineTest {
         actual = engine.authenticate(channelHandlerContext, payload);
         assertThat(actual.isFinished(), is(password.equals(inputPassword)));
     }
-
+    
     private StandardMetaDataContexts getMetaDataContexts(final 
ShardingSphereUser user) {
-        return new StandardMetaDataContexts(new LinkedHashMap<>(),
+        return new StandardMetaDataContexts(mock(ConfigCenter.class), new 
LinkedHashMap<>(),
                 buildGlobalRuleMetaData(user), mock(ExecutorEngine.class), new 
ConfigurationProperties(new Properties()), mock(OptimizeContextFactory.class));
     }
-
+    
     private ShardingSphereRuleMetaData buildGlobalRuleMetaData(final 
ShardingSphereUser user) {
         AuthorityRuleConfiguration authorityRuleConfiguration = new 
AuthorityRuleConfiguration(Collections.singletonList(user), new 
ShardingSphereAlgorithmConfiguration("NATIVE", new Properties()));
         AuthorityRule rule = new 
AuthorityRuleBuilder().build(authorityRuleConfiguration, 
Collections.emptyMap());
-        ShardingSphereRuleMetaData metaData = new 
ShardingSphereRuleMetaData(Collections.singletonList(authorityRuleConfiguration),
 Collections.singletonList(rule));
-        return metaData;
+        return new 
ShardingSphereRuleMetaData(Collections.singletonList(authorityRuleConfiguration),
 Collections.singletonList(rule));
     }
     
     @SneakyThrows(ReflectiveOperationException.class)
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
index 8de8fa3..1bd52e5 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/authentication/PostgreSQLAuthenticationHandlerTest.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.constant.PostgreSQLError
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.handshake.PostgreSQLPasswordMessagePacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.payload.PostgreSQLPacketPayload;
 import 
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -125,7 +126,7 @@ public final class PostgreSQLAuthenticationHandlerTest {
     }
     
     private MetaDataContexts getMetaDataContexts(final ShardingSphereUser 
user) {
-        return new StandardMetaDataContexts(getMetaDataMap(),
+        return new StandardMetaDataContexts(mock(ConfigCenter.class), 
getMetaDataMap(),
                 buildGlobalRuleMetaData(user), mock(ExecutorEngine.class), new 
ConfigurationProperties(new Properties()), mock(OptimizeContextFactory.class));
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutorTest.java
index 3cfbbf0..e47f5f8 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutorTest.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.proxy.frontend.postgresql.command.query.binary
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.PostgreSQLBinaryStatementRegistry;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.parse.PostgreSQLComParsePacket;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.parse.PostgreSQLParseCompletePacket;
+import org.apache.shardingsphere.infra.config.persist.ConfigCenter;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
@@ -70,7 +71,7 @@ public final class PostgreSQLComParseExecutorTest {
         when(backendConnection.getSchemaName()).thenReturn("schema");
         Field metaDataContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("metaDataContexts");
         metaDataContexts.setAccessible(true);
-        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(getMetaDataMap(),
+        metaDataContexts.set(ProxyContext.getInstance(), new 
StandardMetaDataContexts(mock(ConfigCenter.class), getMetaDataMap(),
                 mock(ShardingSphereRuleMetaData.class), 
mock(ExecutorEngine.class), new ConfigurationProperties(new Properties()), 
mock(OptimizeContextFactory.class)));
         PostgreSQLComParseExecutor actual = new 
PostgreSQLComParseExecutor(parsePacket, backendConnection);
         assertThat(actual.execute().iterator().next(), 
instanceOf(PostgreSQLParseCompletePacket.class));

Reply via email to