You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/07/01 05:41:47 UTC

[shardingsphere-elasticjob-lite] branch master updated: Separate registerJob and registerRegistryCenter (#876)

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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob-lite.git


The following commit(s) were added to refs/heads/master by this push:
     new bc10bbe  Separate registerJob and registerRegistryCenter (#876)
bc10bbe is described below

commit bc10bbed9c83e8697c8fd7edec41f12cd1e56e3f
Author: Liang Zhang <te...@163.com>
AuthorDate: Wed Jul 1 13:41:40 2020 +0800

    Separate registerJob and registerRegistryCenter (#876)
    
    * Refactor JobScheduler
    
    * Separate registerJob and registerRegistryCenter
---
 .../elasticjob/lite/api/JobScheduler.java          | 17 +++--
 .../lite/internal/schedule/JobRegistry.java        | 16 +++-
 .../elasticjob/lite/api/JobSchedulerTest.java      | 85 ----------------------
 .../config/RescheduleListenerManagerTest.java      |  3 +-
 .../election/ElectionListenerManagerTest.java      |  6 +-
 .../lite/internal/election/LeaderServiceTest.java  |  9 ++-
 .../internal/failover/FailoverServiceTest.java     | 12 ++-
 .../instance/ShutdownListenerManagerTest.java      | 15 ++--
 .../instance/TriggerListenerManagerTest.java       |  6 +-
 .../RegistryCenterConnectionStateListenerTest.java |  9 ++-
 .../lite/internal/schedule/JobRegistryTest.java    | 15 ++--
 .../internal/schedule/SchedulerFacadeTest.java     |  6 +-
 .../lite/internal/server/ServerServiceTest.java    |  6 +-
 .../sharding/ShardingListenerManagerTest.java      |  6 +-
 .../internal/sharding/ShardingServiceTest.java     |  9 ++-
 15 files changed, 87 insertions(+), 133 deletions(-)

diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/JobScheduler.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/JobScheduler.java
index 519cd63..002fa92 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/JobScheduler.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/JobScheduler.java
@@ -82,11 +82,11 @@ public final class JobScheduler {
         this.elasticJob = elasticJob;
         this.elasticJobListeners = Arrays.asList(elasticJobListeners);
         this.tracingConfig = tracingConfig;
-        JobRegistry.getInstance().addJobInstance(jobConfig.getJobName(), new JobInstance());
         setUpFacade = new SetUpFacade(regCenter, jobConfig.getJobName(), this.elasticJobListeners);
         schedulerFacade = new SchedulerFacade(regCenter, jobConfig.getJobName());
         this.jobConfig = setUpFacade.setUpJobConfiguration(null == elasticJob ? ScriptJob.class.getName() : elasticJob.getClass().getName(), jobConfig);
         setGuaranteeServiceForElasticJobListeners(regCenter, this.elasticJobListeners);
+        registerStartUpInfo();
     }
     
     private void setGuaranteeServiceForElasticJobListeners(final CoordinatorRegistryCenter regCenter, final List<ElasticJobListener> elasticJobListeners) {
@@ -98,21 +98,22 @@ public final class JobScheduler {
         }
     }
     
+    private void registerStartUpInfo() {
+        JobRegistry.getInstance().registerRegistryCenter(jobConfig.getJobName(), regCenter);
+        JobRegistry.getInstance().addJobInstance(jobConfig.getJobName(), new JobInstance());
+        JobRegistry.getInstance().setCurrentShardingTotalCount(jobConfig.getJobName(), jobConfig.getShardingTotalCount());
+        setUpFacade.registerStartUpInfo(!jobConfig.isDisabled());
+    }
+    
     /**
      * Initialize job.
      */
     public void init() {
         JobScheduleController jobScheduleController = new JobScheduleController(createScheduler(), createJobDetail(), jobConfig.getJobName());
-        JobRegistry.getInstance().registerJob(jobConfig.getJobName(), jobScheduleController, regCenter);
-        registerStartUpInfo();
+        JobRegistry.getInstance().registerJob(jobConfig.getJobName(), jobScheduleController);
         jobScheduleController.scheduleJob(jobConfig.getCron());
     }
     
-    private void registerStartUpInfo() {
-        JobRegistry.getInstance().setCurrentShardingTotalCount(jobConfig.getJobName(), jobConfig.getShardingTotalCount());
-        setUpFacade.registerStartUpInfo(!jobConfig.isDisabled());
-    }
-    
     private Scheduler createScheduler() {
         Scheduler result;
         try {
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistry.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistry.java
index 97e5ccb..9624a34 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistry.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistry.java
@@ -60,16 +60,24 @@ public final class JobRegistry {
     }
     
     /**
+     * Register registry center.
+     *
+     * @param jobName job name
+     * @param regCenter registry center
+     */
+    public void registerRegistryCenter(final String jobName, final CoordinatorRegistryCenter regCenter) {
+        regCenterMap.put(jobName, regCenter);
+        regCenter.addCacheData("/" + jobName);
+    }
+    
+    /**
      * Register job.
      * 
      * @param jobName job name
      * @param jobScheduleController job schedule controller
-     * @param regCenter registry center
      */
-    public void registerJob(final String jobName, final JobScheduleController jobScheduleController, final CoordinatorRegistryCenter regCenter) {
+    public void registerJob(final String jobName, final JobScheduleController jobScheduleController) {
         schedulerMap.put(jobName, jobScheduleController);
-        regCenterMap.put(jobName, regCenter);
-        regCenter.addCacheData("/" + jobName);
     }
     
     /**
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/JobSchedulerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/JobSchedulerTest.java
deleted file mode 100644
index 48bfb7e..0000000
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/JobSchedulerTest.java
+++ /dev/null
@@ -1,85 +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.elasticjob.lite.api;
-
-import org.apache.shardingsphere.elasticjob.lite.config.JobConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.fixture.TestSimpleJob;
-import org.apache.shardingsphere.elasticjob.lite.handler.sharding.JobInstance;
-import org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobRegistry;
-import org.apache.shardingsphere.elasticjob.lite.internal.schedule.JobTriggerListener;
-import org.apache.shardingsphere.elasticjob.lite.internal.schedule.SchedulerFacade;
-import org.apache.shardingsphere.elasticjob.lite.internal.setup.SetUpFacade;
-import org.apache.shardingsphere.elasticjob.lite.reg.base.CoordinatorRegistryCenter;
-import org.apache.shardingsphere.elasticjob.lite.util.ReflectionUtils;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-import org.quartz.Scheduler;
-import org.quartz.SchedulerException;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-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)
-public final class JobSchedulerTest {
-    
-    @Mock
-    private CoordinatorRegistryCenter regCenter;
-    
-    @Mock
-    private SetUpFacade setUpFacade;
-    
-    @Mock
-    private SchedulerFacade schedulerFacade;
-    
-    private JobConfiguration jobConfig;
-    
-    private JobScheduler jobScheduler;
-    
-    @Before
-    public void setUp() {
-        JobRegistry.getInstance().addJobInstance("test_job", new JobInstance("127.0.0.1@-@0"));
-        jobConfig = JobConfiguration.newBuilder("test_job", JobType.SIMPLE, "* * 0/10 * * ? 2050", 3).build();
-        jobScheduler = new JobScheduler(regCenter, new TestSimpleJob(), jobConfig);
-        ReflectionUtils.setFieldValue(jobScheduler, "regCenter", regCenter);
-        ReflectionUtils.setFieldValue(jobScheduler, "setUpFacade", setUpFacade);
-        ReflectionUtils.setFieldValue(jobScheduler, "schedulerFacade", schedulerFacade);
-    }
-    
-    @Test
-    public void assertInit() throws SchedulerException {
-        when(schedulerFacade.newJobTriggerListener()).thenReturn(new JobTriggerListener(null, null));
-        jobScheduler.init();
-        verify(setUpFacade).registerStartUpInfo(true);
-        Scheduler scheduler = (Scheduler) ReflectionUtils.getFieldValue(JobRegistry.getInstance().getJobScheduleController("test_job"), "scheduler");
-        assertThat(scheduler.getListenerManager().getTriggerListeners().get(0), instanceOf(JobTriggerListener.class));
-        assertTrue(scheduler.isStarted());
-        jobScheduler.shutdown();
-    }
-    
-    @After
-    public void tearDown() {
-        JobRegistry.getInstance().shutdown("test_job");
-    }
-}
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/RescheduleListenerManagerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/RescheduleListenerManagerTest.java
index bd22268..71e542d 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/RescheduleListenerManagerTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/RescheduleListenerManagerTest.java
@@ -81,7 +81,8 @@ public final class RescheduleListenerManagerTest {
     @Test
     public void assertCronSettingChangedJobListenerWhenIsCronPathAndUpdateAndFindJob() {
         JobRegistry.getInstance().addJobInstance("test_job", new JobInstance("127.0.0.1@-@0"));
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         rescheduleListenerManager.new CronSettingAndJobEventChangedJobListener().dataChanged("/test_job/config", Type.NODE_UPDATED, LiteYamlConstants.getJobYaml());
         verify(jobScheduleController).rescheduleJob("0/1 * * * * ?");
         JobRegistry.getInstance().shutdown("test_job");
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/ElectionListenerManagerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/ElectionListenerManagerTest.java
index efed059..a42514f 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/ElectionListenerManagerTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/ElectionListenerManagerTest.java
@@ -97,7 +97,8 @@ public final class ElectionListenerManagerTest {
     
     @Test
     public void assertLeaderElectionWhenRemoveLeaderInstancePathWithAvailableServer() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(serverService.isAvailableServer("127.0.0.1")).thenReturn(true);
         electionListenerManager.new LeaderElectionJobListener().dataChanged("/test_job/leader/election/instance", Type.NODE_REMOVED, "127.0.0.1");
         verify(leaderService).electLeader();
@@ -118,7 +119,8 @@ public final class ElectionListenerManagerTest {
     
     @Test
     public void assertLeaderElectionWhenServerEnableWithoutLeader() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         electionListenerManager.new LeaderElectionJobListener().dataChanged("/test_job/servers/127.0.0.1", Type.NODE_UPDATED, "");
         verify(leaderService).electLeader();
         JobRegistry.getInstance().shutdown("test_job");
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/LeaderServiceTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/LeaderServiceTest.java
index 3fca0b7..8fdf928 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/LeaderServiceTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/election/LeaderServiceTest.java
@@ -72,7 +72,8 @@ public final class LeaderServiceTest {
     
     @Test
     public void assertIsLeaderUntilBlockWithLeader() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(jobNodeStorage.isJobNodeExisted("leader/election/instance")).thenReturn(true);
         when(jobNodeStorage.getJobNodeData("leader/election/instance")).thenReturn("127.0.0.1@-@0");
         assertTrue(leaderService.isLeaderUntilBlock());
@@ -96,7 +97,8 @@ public final class LeaderServiceTest {
     
     @Test
     public void assertIsLeaderUntilBlockWhenHasLeader() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(jobNodeStorage.isJobNodeExisted("leader/election/instance")).thenReturn(false, true);
         when(serverService.hasAvailableServers()).thenReturn(true);
         when(serverService.isAvailableServer("127.0.0.1")).thenReturn(true);
@@ -108,7 +110,8 @@ public final class LeaderServiceTest {
     
     @Test
     public void assertIsLeader() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(jobNodeStorage.getJobNodeData("leader/election/instance")).thenReturn("127.0.0.1@-@0");
         assertTrue(leaderService.isLeader());
         JobRegistry.getInstance().shutdown("test_job");
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/failover/FailoverServiceTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/failover/FailoverServiceTest.java
index d3c65c7..e6e35f7 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/failover/FailoverServiceTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/failover/FailoverServiceTest.java
@@ -125,7 +125,8 @@ public final class FailoverServiceTest {
     
     @Test
     public void assertFailoverLeaderExecutionCallbackIfNotNecessary() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         JobRegistry.getInstance().setJobRunning("test_job", false);
         when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(false);
         failoverService.new FailoverLeaderExecutionCallback().execute();
@@ -139,7 +140,8 @@ public final class FailoverServiceTest {
         JobRegistry.getInstance().setJobRunning("test_job", false);
         when(jobNodeStorage.isJobNodeExisted("leader/failover/items")).thenReturn(true);
         when(jobNodeStorage.getJobNodeChildrenKeys("leader/failover/items")).thenReturn(Arrays.asList("0", "1", "2"));
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         failoverService.new FailoverLeaderExecutionCallback().execute();
         verify(jobNodeStorage).isJobNodeExisted("leader/failover/items");
         verify(jobNodeStorage, times(2)).getJobNodeChildrenKeys("leader/failover/items");
@@ -159,7 +161,8 @@ public final class FailoverServiceTest {
     
     @Test
     public void assertGetFailoverItems() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(jobNodeStorage.getJobNodeChildrenKeys("sharding")).thenReturn(Arrays.asList("0", "1", "2"));
         when(jobNodeStorage.isJobNodeExisted("sharding/0/failover")).thenReturn(true);
         when(jobNodeStorage.isJobNodeExisted("sharding/1/failover")).thenReturn(true);
@@ -183,7 +186,8 @@ public final class FailoverServiceTest {
     
     @Test
     public void assertGetLocalFailoverItems() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(jobNodeStorage.getJobNodeChildrenKeys("sharding")).thenReturn(Arrays.asList("0", "1", "2"));
         when(jobNodeStorage.isJobNodeExisted("sharding/0/failover")).thenReturn(true);
         when(jobNodeStorage.isJobNodeExisted("sharding/1/failover")).thenReturn(true);
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/ShutdownListenerManagerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/ShutdownListenerManagerTest.java
index 0b22bb9..24c1ecc 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/ShutdownListenerManagerTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/ShutdownListenerManagerTest.java
@@ -85,21 +85,24 @@ public final class ShutdownListenerManagerTest {
     
     @Test
     public void assertIsNotLocalInstancePath() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         shutdownListenerManager.new InstanceShutdownStatusJobListener().dataChanged("/test_job/instances/127.0.0.2@-@0", Type.NODE_REMOVED, "");
         verify(schedulerFacade, times(0)).shutdownInstance();
     }
     
     @Test
     public void assertUpdateLocalInstancePath() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         shutdownListenerManager.new InstanceShutdownStatusJobListener().dataChanged("/test_job/instances/127.0.0.1@-@0", Type.NODE_UPDATED, "");
         verify(schedulerFacade, times(0)).shutdownInstance();
     }
     
     @Test
     public void assertRemoveLocalInstancePathForPausedJob() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(jobScheduleController.isPaused()).thenReturn(true);
         shutdownListenerManager.new InstanceShutdownStatusJobListener().dataChanged("/test_job/instances/127.0.0.1@-@0", Type.NODE_REMOVED, "");
         verify(schedulerFacade, times(0)).shutdownInstance();
@@ -107,7 +110,8 @@ public final class ShutdownListenerManagerTest {
     
     @Test
     public void assertRemoveLocalInstancePathForReconnectedRegistryCenter() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(instanceService.isLocalJobInstanceExisted()).thenReturn(true);
         shutdownListenerManager.new InstanceShutdownStatusJobListener().dataChanged("/test_job/instances/127.0.0.1@-@0", Type.NODE_REMOVED, "");
         verify(schedulerFacade, times(0)).shutdownInstance();
@@ -115,7 +119,8 @@ public final class ShutdownListenerManagerTest {
     
     @Test
     public void assertRemoveLocalInstancePath() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         shutdownListenerManager.new InstanceShutdownStatusJobListener().dataChanged("/test_job/instances/127.0.0.1@-@0", Type.NODE_REMOVED, "");
         verify(schedulerFacade).shutdownInstance();
     }
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/TriggerListenerManagerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/TriggerListenerManagerTest.java
index f1a031a..98b3c8c 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/TriggerListenerManagerTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/instance/TriggerListenerManagerTest.java
@@ -92,7 +92,8 @@ public final class TriggerListenerManagerTest {
     
     @Test
     public void assertTriggerWhenJobIsRunning() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         JobRegistry.getInstance().setJobRunning("test_job", true);
         triggerListenerManager.new JobTriggerStatusJobListener().dataChanged("/test_job/instances/127.0.0.1@-@0", Type.NODE_UPDATED, InstanceOperation.TRIGGER.name());
         verify(instanceService).clearTriggerFlag();
@@ -103,7 +104,8 @@ public final class TriggerListenerManagerTest {
     
     @Test
     public void assertTriggerWhenJobIsNotRunning() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         triggerListenerManager.new JobTriggerStatusJobListener().dataChanged("/test_job/instances/127.0.0.1@-@0", Type.NODE_UPDATED, InstanceOperation.TRIGGER.name());
         verify(instanceService).clearTriggerFlag();
         verify(jobScheduleController).triggerJob();
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/listener/RegistryCenterConnectionStateListenerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/listener/RegistryCenterConnectionStateListenerTest.java
index 5019867..746ca6c 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/listener/RegistryCenterConnectionStateListenerTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/listener/RegistryCenterConnectionStateListenerTest.java
@@ -74,7 +74,8 @@ public final class RegistryCenterConnectionStateListenerTest {
     
     @Test
     public void assertConnectionLostListenerWhenConnectionStateIsLost() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         regCenterConnectionStateListener.stateChanged(null, ConnectionState.LOST);
         verify(jobScheduleController).pauseJob();
         JobRegistry.getInstance().shutdown("test_job");
@@ -89,7 +90,8 @@ public final class RegistryCenterConnectionStateListenerTest {
     
     @Test
     public void assertConnectionLostListenerWhenConnectionStateIsReconnected() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(shardingService.getLocalShardingItems()).thenReturn(Arrays.asList(0, 1));
         when(serverService.isEnableServer("127.0.0.1")).thenReturn(true);
         regCenterConnectionStateListener.stateChanged(null, ConnectionState.RECONNECTED);
@@ -108,7 +110,8 @@ public final class RegistryCenterConnectionStateListenerTest {
     
     @Test
     public void assertConnectionLostListenerWhenConnectionStateIsOther() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         regCenterConnectionStateListener.stateChanged(null, ConnectionState.CONNECTED);
         verify(jobScheduleController, times(0)).pauseJob();
         verify(jobScheduleController, times(0)).resumeJob();
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistryTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistryTest.java
index f351f6e..1297614 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistryTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/JobRegistryTest.java
@@ -34,8 +34,7 @@ public final class JobRegistryTest {
     @Test
     public void assertRegisterJob() {
         JobScheduleController jobScheduleController = mock(JobScheduleController.class);
-        CoordinatorRegistryCenter regCenter = mock(CoordinatorRegistryCenter.class);
-        JobRegistry.getInstance().registerJob("test_job_scheduler_for_add", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerJob("test_job_scheduler_for_add", jobScheduleController);
         assertThat(JobRegistry.getInstance().getJobScheduleController("test_job_scheduler_for_add"), is(jobScheduleController));
     }
     
@@ -47,9 +46,8 @@ public final class JobRegistryTest {
     
     @Test
     public void assertGetRegCenter() {
-        JobScheduleController jobScheduleController = mock(JobScheduleController.class);
         CoordinatorRegistryCenter regCenter = mock(CoordinatorRegistryCenter.class);
-        JobRegistry.getInstance().registerJob("test_job_scheduler_for_add", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job_scheduler_for_add", regCenter);
         assertThat(JobRegistry.getInstance().getRegCenter("test_job_scheduler_for_add"), is(regCenter));
     }
     
@@ -80,7 +78,8 @@ public final class JobRegistryTest {
     public void assertShutdown() {
         JobScheduleController jobScheduleController = mock(JobScheduleController.class);
         CoordinatorRegistryCenter regCenter = mock(CoordinatorRegistryCenter.class);
-        JobRegistry.getInstance().registerJob("test_job_for_shutdown", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job_for_shutdown", regCenter);
+        JobRegistry.getInstance().registerJob("test_job_for_shutdown", jobScheduleController);
         JobRegistry.getInstance().shutdown("test_job_for_shutdown");
         verify(jobScheduleController).shutdown();
         verify(regCenter).evictCacheData("/test_job_for_shutdown");
@@ -95,7 +94,8 @@ public final class JobRegistryTest {
     public void assertIsShutdownForJobInstanceNull() {
         JobScheduleController jobScheduleController = mock(JobScheduleController.class);
         CoordinatorRegistryCenter regCenter = mock(CoordinatorRegistryCenter.class);
-        JobRegistry.getInstance().registerJob("test_job_for_job_instance_null", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job_for_job_instance_null", regCenter);
+        JobRegistry.getInstance().registerJob("test_job_for_job_instance_null", jobScheduleController);
         assertTrue(JobRegistry.getInstance().isShutdown("test_job_for_job_instance_null"));
     }
     
@@ -103,7 +103,8 @@ public final class JobRegistryTest {
     public void assertIsNotShutdown() {
         JobScheduleController jobScheduleController = mock(JobScheduleController.class);
         CoordinatorRegistryCenter regCenter = mock(CoordinatorRegistryCenter.class);
-        JobRegistry.getInstance().registerJob("test_job_for_job_not_shutdown", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job_for_job_not_shutdown", regCenter);
+        JobRegistry.getInstance().registerJob("test_job_for_job_not_shutdown", jobScheduleController);
         JobRegistry.getInstance().addJobInstance("test_job_for_job_not_shutdown", new JobInstance("127.0.0.1@-@0"));
         assertFalse(JobRegistry.getInstance().isShutdown("test_job_for_job_not_shutdown"));
     }
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/SchedulerFacadeTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/SchedulerFacadeTest.java
index efb6adf..6e13bcd 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/SchedulerFacadeTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/schedule/SchedulerFacadeTest.java
@@ -69,7 +69,8 @@ public final class SchedulerFacadeTest {
     
     @Test
     public void assertShutdownInstanceIfNotLeaderAndReconcileServiceIsNotRunning() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         schedulerFacade.shutdownInstance();
         verify(leaderService, times(0)).removeLeader();
         verify(monitorService).close();
@@ -81,7 +82,8 @@ public final class SchedulerFacadeTest {
     public void assertShutdownInstanceIfLeaderAndReconcileServiceIsRunning() {
         when(leaderService.isLeader()).thenReturn(true);
         when(reconcileService.isRunning()).thenReturn(true);
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         schedulerFacade.shutdownInstance();
         verify(leaderService).removeLeader();
         verify(monitorService).close();
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/server/ServerServiceTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/server/ServerServiceTest.java
index ff1c8ad..095a317 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/server/ServerServiceTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/server/ServerServiceTest.java
@@ -70,7 +70,8 @@ public final class ServerServiceTest {
     
     @Test
     public void assertPersistOnlineForDisabledServer() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         serverService.persistOnline(false);
         verify(jobNodeStorage).fillJobNode("servers/127.0.0.1", ServerStatus.DISABLED.name());
         JobRegistry.getInstance().shutdown("test_job");
@@ -78,7 +79,8 @@ public final class ServerServiceTest {
     
     @Test
     public void assertPersistOnlineForEnabledServer() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         serverService.persistOnline(true);
         verify(jobNodeStorage).fillJobNode("servers/127.0.0.1", "");
         JobRegistry.getInstance().shutdown("test_job");
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingListenerManagerTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingListenerManagerTest.java
index ecd9614..8c7e787 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingListenerManagerTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingListenerManagerTest.java
@@ -115,7 +115,8 @@ public final class ShardingListenerManagerTest {
     
     @Test
     public void assertListenServersChangedJobListenerWhenIsInstanceChange() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         shardingListenerManager.new ListenServersChangedJobListener().dataChanged("/test_job/instances/xxx", Type.NODE_ADDED, "");
         verify(shardingService).setReshardingFlag();
         JobRegistry.getInstance().shutdown("test_job");
@@ -123,7 +124,8 @@ public final class ShardingListenerManagerTest {
     
     @Test
     public void assertListenServersChangedJobListenerWhenIsServerChange() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         shardingListenerManager.new ListenServersChangedJobListener().dataChanged("/test_job/servers/127.0.0.1", Type.NODE_UPDATED, "");
         verify(shardingService).setReshardingFlag();
         JobRegistry.getInstance().shutdown("test_job");
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingServiceTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingServiceTest.java
index 1bbf755..7b65730 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingServiceTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingServiceTest.java
@@ -179,7 +179,8 @@ public final class ShardingServiceTest {
     
     @Test
     public void assertGetShardingItemsWithEnabledServer() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(serverService.isAvailableServer("127.0.0.1")).thenReturn(true);
         when(configService.load(true)).thenReturn(JobConfiguration.newBuilder("test_job", JobType.SIMPLE, "0/1 * * * * ?", 3).build());
         when(jobNodeStorage.getJobNodeData("sharding/0/instance")).thenReturn("127.0.0.1@-@0");
@@ -196,14 +197,16 @@ public final class ShardingServiceTest {
     
     @Test
     public void assertGetLocalShardingItemsWithDisabledServer() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         assertThat(shardingService.getLocalShardingItems(), is(Collections.<Integer>emptyList()));
         JobRegistry.getInstance().shutdown("test_job");
     }
     
     @Test
     public void assertGetLocalShardingItemsWithEnabledServer() {
-        JobRegistry.getInstance().registerJob("test_job", jobScheduleController, regCenter);
+        JobRegistry.getInstance().registerRegistryCenter("test_job", regCenter);
+        JobRegistry.getInstance().registerJob("test_job", jobScheduleController);
         when(serverService.isAvailableServer("127.0.0.1")).thenReturn(true);
         when(configService.load(true)).thenReturn(JobConfiguration.newBuilder("test_job", JobType.SIMPLE, "0/1 * * * * ?", 3).build());
         when(jobNodeStorage.getJobNodeData("sharding/0/instance")).thenReturn("127.0.0.1@-@0");