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.git


The following commit(s) were added to refs/heads/master by this push:
     new 80308a9  CloudJobConfigurationPOJO instead of CloudJobConfiguration 
(#1082)
80308a9 is described below

commit 80308a94ed92866f69804df1f55fa9b04e099592
Author: Rudy Steiner <[email protected]>
AuthorDate: Thu Jul 16 16:11:37 2020 +0800

    CloudJobConfigurationPOJO instead of CloudJobConfiguration (#1082)
---
 .../util/json/JobConfigurationGsonTypeAdapter.java | 183 ---------------------
 .../elasticjob-cloud-scheduler/pom.xml             |  10 +-
 .../config/job/CloudJobConfigurationListener.java  |  21 +--
 .../config/job/CloudJobConfigurationService.java   |  17 +-
 .../cloud/scheduler/env/BootstrapEnvironment.java  |   5 +-
 .../scheduler/mesos/AppConstraintEvaluator.java    |   5 +-
 .../cloud/scheduler/mesos/FacadeService.java       |  18 +-
 .../mesos/TaskLaunchScheduledService.java          |  13 +-
 .../cloud/scheduler/producer/ProducerManager.java  |  34 ++--
 .../producer/TransientProducerScheduler.java       |  14 +-
 .../scheduler/restful/CloudAppRestfulApi.java      |  14 +-
 .../scheduler/restful/CloudJobRestfulApi.java      |  18 +-
 .../scheduler/state/failover/FailoverService.java  |   6 +-
 .../cloud/scheduler/state/ready/ReadyService.java  |  14 +-
 .../scheduler/state/running/RunningService.java    |   6 +-
 .../scheduler/statistics/StatisticManager.java     |   4 +-
 .../job/CloudJobConfigurationServiceTest.java      |  16 +-
 .../cloud/scheduler/context/JobContextTest.java    |   2 +-
 .../fixture/CloudJobConfigurationBuilder.java      |  37 +++--
 .../scheduler/fixture/CloudJsonConstants.java      |  19 +--
 .../cloud/scheduler/mesos/FacadeServiceTest.java   |   9 +-
 .../cloud/scheduler/mesos/JobTaskRequestTest.java  |   2 +-
 .../cloud/scheduler/mesos/LaunchingTasksTest.java  |   4 +-
 .../cloud/scheduler/mesos/TaskInfoDataTest.java    |   4 +-
 .../mesos/TaskLaunchScheduledServiceTest.java      |   2 +-
 .../scheduler/producer/ProducerManagerTest.java    |   6 +-
 .../producer/TransientProducerSchedulerTest.java   |  12 +-
 .../scheduler/restful/CloudJobRestfulApiTest.java  |   8 +-
 .../scheduler/state/ready/ReadyServiceTest.java    |   2 +-
 29 files changed, 165 insertions(+), 340 deletions(-)

diff --git 
a/elasticjob-cloud/elasticjob-cloud-common/src/main/java/org/apache/shardingsphere/elasticjob/cloud/util/json/JobConfigurationGsonTypeAdapter.java
 
b/elasticjob-cloud/elasticjob-cloud-common/src/main/java/org/apache/shardingsphere/elasticjob/cloud/util/json/JobConfigurationGsonTypeAdapter.java
deleted file mode 100755
index 65c8b77..0000000
--- 
a/elasticjob-cloud/elasticjob-cloud-common/src/main/java/org/apache/shardingsphere/elasticjob/cloud/util/json/JobConfigurationGsonTypeAdapter.java
+++ /dev/null
@@ -1,183 +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.cloud.util.json;
-
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
-import com.google.gson.TypeAdapter;
-import com.google.gson.stream.JsonReader;
-import com.google.gson.stream.JsonWriter;
-import org.apache.shardingsphere.elasticjob.api.JobConfiguration;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
-import 
org.apache.shardingsphere.elasticjob.dataflow.props.DataflowJobProperties;
-import org.apache.shardingsphere.elasticjob.script.props.ScriptJobProperties;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Job configuration gson type adapter.
- */
-public final class JobConfigurationGsonTypeAdapter extends 
TypeAdapter<CloudJobConfiguration> {
-    
-    @Override
-    public CloudJobConfiguration read(final JsonReader in) throws IOException {
-        String jobName = "";
-        String cron = "";
-        int shardingTotalCount = 0;
-        String shardingItemParameters = "";
-        String jobParameter = "";
-        boolean failover = false;
-        boolean misfire = false;
-        String jobExecutorServiceHandlerType = "";
-        String jobErrorHandlerType = "";
-        String description = "";
-        Boolean streamingProcess = null;
-        String scriptCommandLine = null;
-        Map<String, Object> customizedValueMap = new HashMap<>(32, 1);
-        in.beginObject();
-        while (in.hasNext()) {
-            String jsonName = in.nextName();
-            switch (jsonName) {
-                case "jobName":
-                    jobName = in.nextString();
-                    break;
-                case "cron":
-                    cron = in.nextString();
-                    break;
-                case "shardingTotalCount":
-                    shardingTotalCount = in.nextInt();
-                    break;
-                case "shardingItemParameters":
-                    shardingItemParameters = in.nextString();
-                    break;
-                case "jobParameter":
-                    jobParameter = in.nextString();
-                    break;
-                case "failover":
-                    failover = in.nextBoolean();
-                    break;
-                case "misfire":
-                    misfire = in.nextBoolean();
-                    break;
-                case "jobExecutorServiceHandlerType":
-                    jobExecutorServiceHandlerType = in.nextString();
-                    break;
-                case "jobErrorHandlerType":
-                    jobErrorHandlerType = in.nextString();
-                    break;
-                case "description":
-                    description = in.nextString();
-                    break;
-                case "streamingProcess":
-                    streamingProcess = in.nextBoolean();
-                    break;
-                case "scriptCommandLine":
-                    scriptCommandLine = in.nextString();
-                    break;
-                default:
-                    addToCustomizedValueMap(jsonName, in, customizedValueMap);
-                    break;
-            }
-        }
-        in.endObject();
-        JobConfiguration jobConfig = getJobConfiguration(jobName, cron, 
shardingTotalCount, shardingItemParameters,
-                jobParameter, failover, misfire, 
jobExecutorServiceHandlerType, jobErrorHandlerType, description);
-        if (null != streamingProcess) {
-            
jobConfig.getProps().setProperty(DataflowJobProperties.STREAM_PROCESS_KEY, 
Boolean.toString(streamingProcess));
-        }
-        if (null != scriptCommandLine) {
-            jobConfig.getProps().setProperty(ScriptJobProperties.SCRIPT_KEY, 
scriptCommandLine);
-        }
-        return getCloudJobConfiguration(jobConfig, customizedValueMap);
-    }
-    
-    private void addToCustomizedValueMap(final String jsonName, final 
JsonReader in, final Map<String, Object> customizedValueMap) throws IOException 
{
-        switch (jsonName) {
-            case CloudConfigurationConstants.CPU_COUNT:
-            case CloudConfigurationConstants.MEMORY_MB:
-                customizedValueMap.put(jsonName, in.nextDouble());
-                break;
-            case CloudConfigurationConstants.APP_NAME:
-            case CloudConfigurationConstants.JOB_EXECUTION_TYPE:
-                customizedValueMap.put(jsonName, in.nextString());
-                break;
-            default:
-                in.skipValue();
-                break;
-        }
-    }
-    
-    private JobConfiguration getJobConfiguration(final String jobName, final 
String cron, final int shardingTotalCount,
-                                                 final String 
shardingItemParameters, final String jobParameter, final boolean failover, 
final boolean misfire,
-                                                 final String 
jobExecutorServiceHandlerType, final String jobErrorHandlerType, final String 
description) {
-        return JobConfiguration.newBuilder(jobName, 
shardingTotalCount).cron(cron)
-                
.shardingItemParameters(shardingItemParameters).jobParameter(jobParameter).failover(failover).misfire(misfire)
-                
.jobExecutorServiceHandlerType(jobExecutorServiceHandlerType).jobErrorHandlerType(jobErrorHandlerType).description(description)
-                .build();
-    }
-    
-    private CloudJobConfiguration getCloudJobConfiguration(final 
JobConfiguration jobConfig, final Map<String, Object> customizedValueMap) {
-        
Preconditions.checkNotNull(customizedValueMap.get(CloudConfigurationConstants.APP_NAME),
 "appName cannot be null.");
-        
Preconditions.checkNotNull(customizedValueMap.get(CloudConfigurationConstants.CPU_COUNT),
 "cpuCount cannot be null.");
-        Preconditions.checkArgument((double) 
customizedValueMap.get(CloudConfigurationConstants.CPU_COUNT) >= 0.001, 
"cpuCount cannot be less than 0.001");
-        
Preconditions.checkNotNull(customizedValueMap.get(CloudConfigurationConstants.MEMORY_MB),
 "memoryMB cannot be null.");
-        Preconditions.checkArgument((double) 
customizedValueMap.get(CloudConfigurationConstants.MEMORY_MB) >= 1, "memory 
cannot be less than 1");
-        
Preconditions.checkNotNull(customizedValueMap.get(CloudConfigurationConstants.JOB_EXECUTION_TYPE),
 "jobExecutionType cannot be null.");
-        return new CloudJobConfiguration((String) 
customizedValueMap.get(CloudConfigurationConstants.APP_NAME),
-                (double) 
customizedValueMap.get(CloudConfigurationConstants.CPU_COUNT),
-                (double) 
customizedValueMap.get(CloudConfigurationConstants.MEMORY_MB),
-                
CloudJobExecutionType.valueOf(customizedValueMap.get(CloudConfigurationConstants.JOB_EXECUTION_TYPE).toString()),
 jobConfig);
-    }
-    
-    @Override
-    public void write(final JsonWriter out, final CloudJobConfiguration value) 
throws IOException {
-        out.beginObject();
-        out.name("jobName").value(value.getJobConfig().getJobName());
-        out.name("cron").value(value.getJobConfig().getCron());
-        
out.name("shardingTotalCount").value(value.getJobConfig().getShardingTotalCount());
-        
out.name("shardingItemParameters").value(value.getJobConfig().getShardingItemParameters());
-        out.name("jobParameter").value(value.getJobConfig().getJobParameter());
-        out.name("failover").value(value.getJobConfig().isFailover());
-        out.name("misfire").value(value.getJobConfig().isMisfire());
-        if 
(!Strings.isNullOrEmpty(value.getJobConfig().getJobExecutorServiceHandlerType()))
 {
-            
out.name("executorServiceHandler").value(value.getJobConfig().getJobExecutorServiceHandlerType());
-        }
-        if 
(!Strings.isNullOrEmpty(value.getJobConfig().getJobErrorHandlerType())) {
-            
out.name("jobExceptionHandler").value(value.getJobConfig().getJobErrorHandlerType());
-        }
-        out.name("description").value(value.getJobConfig().getDescription());
-        if 
(value.getJobConfig().getProps().containsKey(DataflowJobProperties.STREAM_PROCESS_KEY))
 {
-            
out.name("streamingProcess").value(value.getJobConfig().getProps().getProperty(DataflowJobProperties.STREAM_PROCESS_KEY));
-        }
-        if 
(value.getJobConfig().getProps().containsKey(ScriptJobProperties.SCRIPT_KEY)) {
-            
out.name("scriptCommandLine").value(value.getJobConfig().getProps().getProperty(ScriptJobProperties.SCRIPT_KEY));
-        }
-        writeCustomized(out, value);
-        out.endObject();
-    }
-    
-    private void writeCustomized(final JsonWriter out, final 
CloudJobConfiguration value) throws IOException {
-        
out.name(CloudConfigurationConstants.APP_NAME).value(value.getAppName());
-        
out.name(CloudConfigurationConstants.CPU_COUNT).value(value.getCpuCount());
-        
out.name(CloudConfigurationConstants.MEMORY_MB).value(value.getMemoryMB());
-        
out.name(CloudConfigurationConstants.JOB_EXECUTION_TYPE).value(value.getJobExecutionType().name());
-    }
-}
diff --git a/elasticjob-cloud/elasticjob-cloud-scheduler/pom.xml 
b/elasticjob-cloud/elasticjob-cloud-scheduler/pom.xml
index ab4bc98..f0f4409 100755
--- a/elasticjob-cloud/elasticjob-cloud-scheduler/pom.xml
+++ b/elasticjob-cloud/elasticjob-cloud-scheduler/pom.xml
@@ -142,7 +142,6 @@
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>bin/*</exclude>
-                   <exclude>conf/*</exclude>
                    <exclude>assembly/*</exclude>
                </excludes>
             </resource>
@@ -150,6 +149,15 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <configuration>
+                    <excludes>
+                        <exclude>conf/*.properties</exclude>
+                    </excludes>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <configuration>
                     <descriptors>
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationListener.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationListener.java
index e990c02..945a8f6 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationListener.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationListener.java
@@ -18,10 +18,10 @@
 package org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job;
 
 import lombok.extern.slf4j.Slf4j;
+
 import org.apache.curator.framework.recipes.cache.ChildData;
 import org.apache.curator.framework.recipes.cache.CuratorCache;
 import org.apache.curator.framework.recipes.cache.CuratorCacheListener;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
 import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.producer.ProducerManager;
@@ -51,25 +51,26 @@ public final class CloudJobConfigurationListener implements 
CuratorCacheListener
     }
     
     @Override
+
     public void event(final Type type, final ChildData oldData, final 
ChildData data) {
         String path = data.getPath();
         if (Type.NODE_CREATED == type && isJobConfigNode(path)) {
-            CloudJobConfiguration cloudJobConfig = 
getCloudJobConfiguration(data);
+            CloudJobConfigurationPOJO cloudJobConfig = 
getCloudJobConfiguration(data);
             if (null != cloudJobConfig) {
                 producerManager.schedule(cloudJobConfig);
             }
         } else if (Type.NODE_CHANGED == type && isJobConfigNode(path)) {
-            CloudJobConfiguration cloudJobConfig = 
getCloudJobConfiguration(data);
+            CloudJobConfigurationPOJO cloudJobConfig = 
getCloudJobConfiguration(data);
             if (null == cloudJobConfig) {
                 return;
             }
             if (CloudJobExecutionType.DAEMON == 
cloudJobConfig.getJobExecutionType()) {
-                
readyService.remove(Collections.singletonList(cloudJobConfig.getJobConfig().getJobName()));
+                
readyService.remove(Collections.singletonList(cloudJobConfig.getJobName()));
             }
-            if (!cloudJobConfig.getJobConfig().isMisfire()) {
-                
readyService.setMisfireDisabled(cloudJobConfig.getJobConfig().getJobName());
+            if (!cloudJobConfig.isMisfire()) {
+                readyService.setMisfireDisabled(cloudJobConfig.getJobName());
             }
-            
producerManager.reschedule(cloudJobConfig.getJobConfig().getJobName());
+            producerManager.reschedule(cloudJobConfig.getJobName());
         } else if (Type.NODE_DELETED == type && isJobConfigNode(path)) {
             String jobName = 
path.substring(CloudJobConfigurationNode.ROOT.length() + 1, path.length());
             producerManager.unschedule(jobName);
@@ -79,10 +80,10 @@ public final class CloudJobConfigurationListener implements 
CuratorCacheListener
     private boolean isJobConfigNode(final String path) {
         return path.startsWith(CloudJobConfigurationNode.ROOT) && 
path.length() > CloudJobConfigurationNode.ROOT.length();
     }
-    
-    private CloudJobConfiguration getCloudJobConfiguration(final ChildData 
data) {
+
+    private CloudJobConfigurationPOJO getCloudJobConfiguration(final ChildData 
data) {
         try {
-            return YamlEngine.unmarshal(new String(data.getData()), 
CloudJobConfigurationPOJO.class).toCloudJobConfiguration();
+            return YamlEngine.unmarshal(new String(data.getData()), 
CloudJobConfigurationPOJO.class);
             // CHECKSTYLE:OFF
         } catch (final Exception ex) {
             log.warn("Wrong Cloud Job Configuration with:", ex.getMessage());
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationService.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationService.java
index fb46297..e2a792d 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationService.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationService.java
@@ -19,7 +19,6 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job;
 
 import com.google.common.base.Strings;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import org.apache.shardingsphere.elasticjob.infra.yaml.YamlEngine;
 import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
@@ -43,9 +42,9 @@ public final class CloudJobConfigurationService {
      * 
      * @param cloudJobConfig cloud job configuration
      */
-    public void add(final CloudJobConfiguration cloudJobConfig) {
+    public void add(final CloudJobConfigurationPOJO cloudJobConfig) {
         regCenter.persist(
-                
CloudJobConfigurationNode.getRootNodePath(cloudJobConfig.getJobConfig().getJobName()),
 
YamlEngine.marshal(CloudJobConfigurationPOJO.fromCloudJobConfiguration(cloudJobConfig)));
+                
CloudJobConfigurationNode.getRootNodePath(cloudJobConfig.getJobName()), 
YamlEngine.marshal(cloudJobConfig));
     }
     
     /**
@@ -53,9 +52,9 @@ public final class CloudJobConfigurationService {
      *
      * @param cloudJobConfig cloud job configuration
      */
-    public void update(final CloudJobConfiguration cloudJobConfig) {
+    public void update(final CloudJobConfigurationPOJO cloudJobConfig) {
         regCenter.update(
-                
CloudJobConfigurationNode.getRootNodePath(cloudJobConfig.getJobConfig().getJobName()),
 
YamlEngine.marshal(CloudJobConfigurationPOJO.fromCloudJobConfiguration(cloudJobConfig)));
+                
CloudJobConfigurationNode.getRootNodePath(cloudJobConfig.getJobName()), 
YamlEngine.marshal(cloudJobConfig));
     }
     
     /**
@@ -63,12 +62,12 @@ public final class CloudJobConfigurationService {
      *
      * @return collection of the registered cloud job configuration
      */
-    public Collection<CloudJobConfiguration> loadAll() {
+    public Collection<CloudJobConfigurationPOJO> loadAll() {
         if (!regCenter.isExisted(CloudJobConfigurationNode.ROOT)) {
             return Collections.emptyList();
         }
         List<String> jobNames = 
regCenter.getChildrenKeys(CloudJobConfigurationNode.ROOT);
-        Collection<CloudJobConfiguration> result = new 
ArrayList<>(jobNames.size());
+        Collection<CloudJobConfigurationPOJO> result = new 
ArrayList<>(jobNames.size());
         for (String each : jobNames) {
             load(each).ifPresent(result::add);
         }
@@ -81,9 +80,9 @@ public final class CloudJobConfigurationService {
      * @param jobName job name
      * @return cloud job configuration
      */
-    public Optional<CloudJobConfiguration> load(final String jobName) {
+    public Optional<CloudJobConfigurationPOJO> load(final String jobName) {
         String configContent = 
regCenter.get(CloudJobConfigurationNode.getRootNodePath(jobName));
-        return Strings.isNullOrEmpty(configContent) ? Optional.empty() : 
Optional.of(YamlEngine.unmarshal(configContent, 
CloudJobConfigurationPOJO.class).toCloudJobConfiguration());
+        return Strings.isNullOrEmpty(configContent) ? Optional.empty() : 
Optional.of(YamlEngine.unmarshal(configContent, 
CloudJobConfigurationPOJO.class));
     }
     
     /**
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/env/BootstrapEnvironment.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/env/BootstrapEnvironment.java
index 69ff04e..266feb9 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/env/BootstrapEnvironment.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/env/BootstrapEnvironment.java
@@ -25,10 +25,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.dbcp.BasicDataSource;
 import 
org.apache.shardingsphere.elasticjob.reg.zookeeper.ZookeeperConfiguration;
 import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
-
 import javax.sql.DataSource;
-import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Optional;
 import java.util.Properties;
@@ -52,7 +51,7 @@ public final class BootstrapEnvironment {
     
     private Properties getProperties() {
         Properties result = new Properties();
-        try (FileInputStream fileInputStream = new 
FileInputStream(PROPERTIES_PATH)) {
+        try (InputStream fileInputStream = 
BootstrapEnvironment.class.getClassLoader().getResourceAsStream(PROPERTIES_PATH))
 {
             result.load(fileInputStream);
         } catch (final IOException ex) {
             log.warn("Can not load properties file from path: '{}'.", 
PROPERTIES_PATH);
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/AppConstraintEvaluator.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/AppConstraintEvaluator.java
index 3424b7c..e83a4cf 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/AppConstraintEvaluator.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/AppConstraintEvaluator.java
@@ -29,6 +29,7 @@ import lombok.AccessLevel;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.mesos.MesosStateService.ExecutorStateInfo;
 import org.apache.shardingsphere.elasticjob.infra.context.TaskContext;
@@ -147,11 +148,11 @@ public final class AppConstraintEvaluator implements 
ConstraintEvaluator {
     }
     
     private CloudJobConfiguration getJobConfiguration(final TaskContext 
taskContext) throws LackConfigException {
-        Optional<CloudJobConfiguration> cloudJobConfig = 
facadeService.load(taskContext.getMetaInfo().getJobName());
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
facadeService.load(taskContext.getMetaInfo().getJobName());
         if (!cloudJobConfig.isPresent()) {
             throw new LackConfigException("JOB", 
taskContext.getMetaInfo().getJobName());
         }
-        return cloudJobConfig.get();
+        return cloudJobConfig.get().toCloudJobConfiguration();
     }
     
     private class LackConfigException extends Exception {
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeService.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeService.java
index c445d71..a61f62d 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeService.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeService.java
@@ -18,8 +18,8 @@
 package org.apache.shardingsphere.elasticjob.cloud.scheduler.mesos;
 
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfigurationService;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
@@ -159,21 +159,21 @@ public final class FacadeService {
      * @param taskContext task running context
      */
     public void recordFailoverTask(final TaskContext taskContext) {
-        Optional<CloudJobConfiguration> cloudJobConfigOptional = 
jobConfigService.load(taskContext.getMetaInfo().getJobName());
+        Optional<CloudJobConfigurationPOJO> cloudJobConfigOptional = 
jobConfigService.load(taskContext.getMetaInfo().getJobName());
         if (!cloudJobConfigOptional.isPresent()) {
             return;
         }
         if (isDisable(cloudJobConfigOptional.get())) {
             return;
         }
-        CloudJobConfiguration cloudJobConfig = cloudJobConfigOptional.get();
-        if (cloudJobConfig.getJobConfig().isFailover() || 
CloudJobExecutionType.DAEMON == cloudJobConfig.getJobExecutionType()) {
+        CloudJobConfigurationPOJO cloudJobConfig = 
cloudJobConfigOptional.get();
+        if (cloudJobConfig.isFailover() || CloudJobExecutionType.DAEMON == 
cloudJobConfig.getJobExecutionType()) {
             failoverService.add(taskContext);
         }
     }
     
-    private boolean isDisable(final CloudJobConfiguration cloudJobConfig) {
-        return disableAppService.isDisabled(cloudJobConfig.getAppName()) || 
disableJobService.isDisabled(cloudJobConfig.getJobConfig().getJobName());
+    private boolean isDisable(final CloudJobConfigurationPOJO cloudJobConfig) {
+        return disableAppService.isDisabled(cloudJobConfig.getAppName()) || 
disableJobService.isDisabled(cloudJobConfig.getJobName());
     }
     
     /**
@@ -191,7 +191,7 @@ public final class FacadeService {
      * @param jobName job name
      * @return cloud job config
      */
-    public Optional<CloudJobConfiguration> load(final String jobName) {
+    public Optional<CloudJobConfigurationPOJO> load(final String jobName) {
         return jobConfigService.load(jobName);
     }
     
@@ -221,7 +221,7 @@ public final class FacadeService {
      * @param jobName job name
      */
     public void addDaemonJobToReadyQueue(final String jobName) {
-        Optional<CloudJobConfiguration> cloudJobConfig = 
jobConfigService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
jobConfigService.load(jobName);
         if (!cloudJobConfig.isPresent()) {
             return;
         }
@@ -296,7 +296,7 @@ public final class FacadeService {
      * @return true is disabled, otherwise not
      */
     public boolean isJobDisabled(final String jobName) {
-        Optional<CloudJobConfiguration> jobConfiguration = 
jobConfigService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> jobConfiguration = 
jobConfigService.load(jobName);
         return !jobConfiguration.isPresent() || 
disableAppService.isDisabled(jobConfiguration.get().getAppName()) || 
disableJobService.isDisabled(jobName);
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledService.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledService.java
index 86b86c2..c9bc110 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledService.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledService.java
@@ -35,6 +35,7 @@ import org.apache.mesos.SchedulerDriver;
 import org.apache.shardingsphere.elasticjob.api.listener.ShardingContexts;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.env.BootstrapEnvironment;
 import 
org.apache.shardingsphere.elasticjob.cloud.util.config.ShardingItemParameters;
@@ -151,7 +152,7 @@ public final class TaskLaunchScheduledService extends 
AbstractScheduledService {
     
     private Protos.TaskInfo getTaskInfo(final Protos.Offer offer, final 
TaskAssignmentResult taskAssignmentResult) {
         TaskContext taskContext = 
TaskContext.from(taskAssignmentResult.getTaskId());
-        Optional<CloudJobConfiguration> cloudJobConfig = 
facadeService.load(taskContext.getMetaInfo().getJobName());
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
facadeService.load(taskContext.getMetaInfo().getJobName());
         if (!cloudJobConfig.isPresent()) {
             return null;
         }
@@ -160,19 +161,19 @@ public final class TaskLaunchScheduledService extends 
AbstractScheduledService {
             return null;
         }
         taskContext.setSlaveId(offer.getSlaveId().getValue());
-        ShardingContexts shardingContexts = getShardingContexts(taskContext, 
appConfig.get(), cloudJobConfig.get());
+        ShardingContexts shardingContexts = getShardingContexts(taskContext, 
appConfig.get(), cloudJobConfig.get().toCloudJobConfiguration());
         boolean isCommandExecutor = CloudJobExecutionType.TRANSIENT == 
cloudJobConfig.get().getJobExecutionType()
-                && 
cloudJobConfig.get().getJobConfig().getProps().contains(ScriptJobProperties.SCRIPT_KEY);
+                && 
cloudJobConfig.get().getProps().contains(ScriptJobProperties.SCRIPT_KEY);
         String script = appConfig.get().getBootstrapScript();
         if (isCommandExecutor) {
-            script = 
cloudJobConfig.get().getJobConfig().getProps().getProperty(ScriptJobProperties.SCRIPT_KEY);
+            script = 
cloudJobConfig.get().getProps().getProperty(ScriptJobProperties.SCRIPT_KEY);
         }
         Protos.CommandInfo.URI uri = buildURI(appConfig.get(), 
isCommandExecutor);
         Protos.CommandInfo command = buildCommand(uri, script, 
shardingContexts, isCommandExecutor);
         if (isCommandExecutor) {
-            return buildCommandExecutorTaskInfo(taskContext, 
cloudJobConfig.get(), shardingContexts, offer, command);
+            return buildCommandExecutorTaskInfo(taskContext, 
cloudJobConfig.get().toCloudJobConfiguration(), shardingContexts, offer, 
command);
         } else {
-            return buildCustomizedExecutorTaskInfo(taskContext, 
appConfig.get(), cloudJobConfig.get(), shardingContexts, offer, command);
+            return buildCustomizedExecutorTaskInfo(taskContext, 
appConfig.get(), cloudJobConfig.get().toCloudJobConfiguration(), 
shardingContexts, offer, command);
         }
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManager.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManager.java
index ebbed8e..8b20925 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManager.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManager.java
@@ -22,8 +22,8 @@ import org.apache.mesos.Protos;
 import org.apache.mesos.Protos.ExecutorID;
 import org.apache.mesos.Protos.SlaveID;
 import org.apache.mesos.SchedulerDriver;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.exception.AppConfigurationException;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfigurationService;
@@ -78,7 +78,7 @@ public final class ProducerManager {
     public void startup() {
         log.info("Start producer manager");
         transientProducerScheduler.start();
-        for (CloudJobConfiguration each : configService.loadAll()) {
+        for (CloudJobConfigurationPOJO each : configService.loadAll()) {
             schedule(each);
         }
     }
@@ -88,17 +88,17 @@ public final class ProducerManager {
      * 
      * @param cloudJobConfig cloud job configuration
      */
-    public void register(final CloudJobConfiguration cloudJobConfig) {
-        if 
(disableJobService.isDisabled(cloudJobConfig.getJobConfig().getJobName())) {
-            throw new JobConfigurationException("Job '%s' has been disable.", 
cloudJobConfig.getJobConfig().getJobName());
+    public void register(final CloudJobConfigurationPOJO cloudJobConfig) {
+        if (disableJobService.isDisabled(cloudJobConfig.getJobName())) {
+            throw new JobConfigurationException("Job '%s' has been disable.", 
cloudJobConfig.getJobName());
         }
         Optional<CloudAppConfiguration> appConfigFromZk = 
appConfigService.load(cloudJobConfig.getAppName());
         if (!appConfigFromZk.isPresent()) {
             throw new AppConfigurationException("Register app '%s' firstly.", 
cloudJobConfig.getAppName());
         }
-        Optional<CloudJobConfiguration> jobConfigFromZk = 
configService.load(cloudJobConfig.getJobConfig().getJobName());
+        Optional<CloudJobConfigurationPOJO> jobConfigFromZk = 
configService.load(cloudJobConfig.getJobName());
         if (jobConfigFromZk.isPresent()) {
-            throw new JobConfigurationException("Job '%s' already existed.", 
cloudJobConfig.getJobConfig().getJobName());
+            throw new JobConfigurationException("Job '%s' already existed.", 
cloudJobConfig.getJobName());
         }
         configService.add(cloudJobConfig);
         schedule(cloudJobConfig);
@@ -109,13 +109,13 @@ public final class ProducerManager {
      *
      * @param cloudJobConfig cloud job configuration
      */
-    public void update(final CloudJobConfiguration cloudJobConfig) {
-        Optional<CloudJobConfiguration> jobConfigFromZk = 
configService.load(cloudJobConfig.getJobConfig().getJobName());
+    public void update(final CloudJobConfigurationPOJO cloudJobConfig) {
+        Optional<CloudJobConfigurationPOJO> jobConfigFromZk = 
configService.load(cloudJobConfig.getJobName());
         if (!jobConfigFromZk.isPresent()) {
-            throw new JobConfigurationException("Cannot found job '%s', please 
register first.", cloudJobConfig.getJobConfig().getJobName());
+            throw new JobConfigurationException("Cannot found job '%s', please 
register first.", cloudJobConfig.getJobName());
         }
         configService.update(cloudJobConfig);
-        reschedule(cloudJobConfig.getJobConfig().getJobName());
+        reschedule(cloudJobConfig.getJobName());
     }
     
     /**
@@ -124,7 +124,7 @@ public final class ProducerManager {
      * @param jobName job name
      */
     public void deregister(final String jobName) {
-        Optional<CloudJobConfiguration> jobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> jobConfig = 
configService.load(jobName);
         if (jobConfig.isPresent()) {
             disableJobService.remove(jobName);
             configService.remove(jobName);
@@ -137,14 +137,14 @@ public final class ProducerManager {
      *
      * @param cloudJobConfig cloud job configuration
      */
-    public void schedule(final CloudJobConfiguration cloudJobConfig) {
-        if (disableAppService.isDisabled(cloudJobConfig.getAppName()) || 
disableJobService.isDisabled(cloudJobConfig.getJobConfig().getJobName())) {
+    public void schedule(final CloudJobConfigurationPOJO cloudJobConfig) {
+        if (disableAppService.isDisabled(cloudJobConfig.getAppName()) || 
disableJobService.isDisabled(cloudJobConfig.getJobName())) {
             return;
         }
         if (CloudJobExecutionType.TRANSIENT == 
cloudJobConfig.getJobExecutionType()) {
             transientProducerScheduler.register(cloudJobConfig);
         } else if (CloudJobExecutionType.DAEMON == 
cloudJobConfig.getJobExecutionType()) {
-            readyService.addDaemon(cloudJobConfig.getJobConfig().getJobName());
+            readyService.addDaemon(cloudJobConfig.getJobName());
         }
     }
     
@@ -159,7 +159,7 @@ public final class ProducerManager {
         }
         runningService.remove(jobName);
         readyService.remove(Collections.singletonList(jobName));
-        Optional<CloudJobConfiguration> jobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> jobConfig = 
configService.load(jobName);
         jobConfig.ifPresent(transientProducerScheduler::deregister);
     }
     
@@ -170,7 +170,7 @@ public final class ProducerManager {
      */
     public void reschedule(final String jobName) {
         unschedule(jobName);
-        Optional<CloudJobConfiguration> jobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> jobConfig = 
configService.load(jobName);
         jobConfig.ifPresent(this::schedule);
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerScheduler.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerScheduler.java
index 74a0c46..f3943b8 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerScheduler.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerScheduler.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.elasticjob.cloud.scheduler.producer;
 
 import lombok.Setter;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.state.ready.ReadyService;
 import org.apache.shardingsphere.elasticjob.infra.exception.JobSystemException;
 import org.quartz.CronScheduleBuilder;
@@ -85,10 +85,10 @@ final class TransientProducerScheduler {
     }
     
     // TODO Concurrency optimization
-    synchronized void register(final CloudJobConfiguration cloudJobConfig) {
-        String cron = cloudJobConfig.getJobConfig().getCron();
+    synchronized void register(final CloudJobConfigurationPOJO cloudJobConfig) 
{
+        String cron = cloudJobConfig.getCron();
         JobKey jobKey = buildJobKey(cron);
-        repository.put(jobKey, cloudJobConfig.getJobConfig().getJobName());
+        repository.put(jobKey, cloudJobConfig.getJobName());
         try {
             if (!scheduler.checkExists(jobKey)) {
                 scheduler.scheduleJob(buildJobDetail(jobKey), 
buildTrigger(jobKey.getName()));
@@ -109,9 +109,9 @@ final class TransientProducerScheduler {
         return 
TriggerBuilder.newTrigger().withIdentity(cron).withSchedule(CronScheduleBuilder.cronSchedule(cron).withMisfireHandlingInstructionDoNothing()).build();
     }
     
-    synchronized void deregister(final CloudJobConfiguration cloudJobConfig) {
-        repository.remove(cloudJobConfig.getJobConfig().getJobName());
-        String cron = cloudJobConfig.getJobConfig().getCron();
+    synchronized void deregister(final CloudJobConfigurationPOJO 
cloudJobConfig) {
+        repository.remove(cloudJobConfig.getJobName());
+        String cron = cloudJobConfig.getCron();
         if (!repository.containsKey(buildJobKey(cron))) {
             try {
                 scheduler.unscheduleJob(TriggerKey.triggerKey(cron));
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudAppRestfulApi.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudAppRestfulApi.java
index 13b1229..8e6b28e 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudAppRestfulApi.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudAppRestfulApi.java
@@ -19,7 +19,7 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.restful;
 
 import org.apache.mesos.Protos.ExecutorID;
 import org.apache.mesos.Protos.SlaveID;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.exception.AppConfigurationException;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfigurationGsonFactory;
@@ -162,9 +162,9 @@ public final class CloudAppRestfulApi {
     public void disable(@PathParam("appName") final String appName) {
         if (appConfigService.load(appName).isPresent()) {
             disableAppService.add(appName);
-            for (CloudJobConfiguration each : jobConfigService.loadAll()) {
+            for (CloudJobConfigurationPOJO each : jobConfigService.loadAll()) {
                 if (appName.equals(each.getAppName())) {
-                    
producerManager.unschedule(each.getJobConfig().getJobName());
+                    producerManager.unschedule(each.getJobName());
                 }
             }
         }
@@ -180,9 +180,9 @@ public final class CloudAppRestfulApi {
     public void enable(@PathParam("appName") final String appName) {
         if (appConfigService.load(appName).isPresent()) {
             disableAppService.remove(appName);
-            for (CloudJobConfiguration each : jobConfigService.loadAll()) {
+            for (CloudJobConfigurationPOJO each : jobConfigService.loadAll()) {
                 if (appName.equals(each.getAppName())) {
-                    
producerManager.reschedule(each.getJobConfig().getJobName());
+                    producerManager.reschedule(each.getJobName());
                 }
             }
         }
@@ -204,9 +204,9 @@ public final class CloudAppRestfulApi {
     }
     
     private void removeAppAndJobConfigurations(final String appName) {
-        for (CloudJobConfiguration each : jobConfigService.loadAll()) {
+        for (CloudJobConfigurationPOJO each : jobConfigService.loadAll()) {
             if (appName.equals(each.getAppName())) {
-                producerManager.deregister(each.getJobConfig().getJobName());
+                producerManager.deregister(each.getJobName());
             }
         }
         disableAppService.remove(appName);
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApi.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApi.java
index 96436f4..b4e87a4 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApi.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApi.java
@@ -20,8 +20,8 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.restful;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.env.BootstrapEnvironment;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.mesos.FacadeService;
@@ -35,15 +35,12 @@ import 
org.apache.shardingsphere.elasticjob.cloud.statistics.type.job.JobRegiste
 import 
org.apache.shardingsphere.elasticjob.cloud.statistics.type.job.JobRunningStatistics;
 import 
org.apache.shardingsphere.elasticjob.cloud.statistics.type.task.TaskResultStatistics;
 import 
org.apache.shardingsphere.elasticjob.cloud.statistics.type.task.TaskRunningStatistics;
-import org.apache.shardingsphere.elasticjob.cloud.util.json.GsonFactory;
-import 
org.apache.shardingsphere.elasticjob.cloud.util.json.JobConfigurationGsonTypeAdapter;
 import org.apache.shardingsphere.elasticjob.infra.context.TaskContext;
 import org.apache.shardingsphere.elasticjob.infra.exception.JobSystemException;
 import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
 import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
 import org.apache.shardingsphere.elasticjob.tracing.event.JobExecutionEvent;
 import org.apache.shardingsphere.elasticjob.tracing.event.JobStatusTraceEvent;
-
 import javax.sql.DataSource;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
@@ -107,7 +104,6 @@ public final class CloudJobRestfulApi {
     public static void init(final CoordinatorRegistryCenter regCenter, final 
ProducerManager producerManager) {
         CloudJobRestfulApi.regCenter = regCenter;
         CloudJobRestfulApi.producerManager = producerManager;
-        GsonFactory.registerTypeAdapter(CloudJobConfiguration.class, new 
JobConfigurationGsonTypeAdapter());
         Optional<TracingConfiguration> tracingConfiguration = 
BootstrapEnvironment.getInstance().getTracingConfiguration();
         jobEventRdbSearch = tracingConfiguration.map(tracingConfiguration1 -> 
new JobEventRdbSearch((DataSource) 
tracingConfiguration1.getStorage())).orElse(null);
     }
@@ -120,7 +116,7 @@ public final class CloudJobRestfulApi {
     @POST
     @Path("/register")
     @Consumes(MediaType.APPLICATION_JSON)
-    public void register(final CloudJobConfiguration cloudJobConfig) {
+    public void register(final CloudJobConfigurationPOJO cloudJobConfig) {
         producerManager.register(cloudJobConfig);
     }
     
@@ -132,7 +128,7 @@ public final class CloudJobRestfulApi {
     @PUT
     @Path("/update")
     @Consumes(MediaType.APPLICATION_JSON)
-    public void update(final CloudJobConfiguration cloudJobConfig) {
+    public void update(final CloudJobConfigurationPOJO cloudJobConfig) {
         producerManager.update(cloudJobConfig);
     }
     
@@ -169,7 +165,7 @@ public final class CloudJobRestfulApi {
     @POST
     @Path("/{jobName}/enable")
     public void enable(@PathParam("jobName") final String jobName) {
-        Optional<CloudJobConfiguration> configOptional = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> configOptional = 
configService.load(jobName);
         if (configOptional.isPresent()) {
             facadeService.enableJob(jobName);
             producerManager.reschedule(jobName);
@@ -199,7 +195,7 @@ public final class CloudJobRestfulApi {
     @Path("/trigger")
     @Consumes(MediaType.APPLICATION_JSON)
     public void trigger(final String jobName) {
-        Optional<CloudJobConfiguration> config = configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> config = 
configService.load(jobName);
         if (config.isPresent() && CloudJobExecutionType.DAEMON == 
config.get().getJobExecutionType()) {
             throw new JobSystemException("Daemon job '%s' cannot support 
trigger.", jobName);
         }
@@ -216,7 +212,7 @@ public final class CloudJobRestfulApi {
     @Path("/jobs/{jobName}")
     @Consumes(MediaType.APPLICATION_JSON)
     public Response detail(@PathParam("jobName") final String jobName) {
-        Optional<CloudJobConfiguration> cloudJobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
configService.load(jobName);
         if (!cloudJobConfig.isPresent()) {
             return Response.status(Response.Status.NOT_FOUND).build();
         }
@@ -231,7 +227,7 @@ public final class CloudJobRestfulApi {
     @GET
     @Path("/jobs")
     @Consumes(MediaType.APPLICATION_JSON)
-    public Collection<CloudJobConfiguration> findAllJobs() {
+    public Collection<CloudJobConfigurationPOJO> findAllJobs() {
         return configService.loadAll();
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/failover/FailoverService.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/failover/FailoverService.java
index 44a0400..677dffc 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/failover/FailoverService.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/failover/FailoverService.java
@@ -22,7 +22,7 @@ import com.google.common.base.Strings;
 import com.google.common.hash.HashCode;
 import com.google.common.hash.Hashing;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
 import org.apache.shardingsphere.elasticjob.cloud.scheduler.context.JobContext;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.env.BootstrapEnvironment;
@@ -97,14 +97,14 @@ public final class FailoverService {
                 regCenter.remove(FailoverNode.getFailoverJobNodePath(each));
                 continue;
             }
-            Optional<CloudJobConfiguration> cloudJobConfig = 
configService.load(each);
+            Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
configService.load(each);
             if (!cloudJobConfig.isPresent()) {
                 regCenter.remove(FailoverNode.getFailoverJobNodePath(each));
                 continue;
             }
             List<Integer> assignedShardingItems = 
getAssignedShardingItems(each, taskIdList, assignedTasks);
             if (!assignedShardingItems.isEmpty()) {
-                result.add(new JobContext(cloudJobConfig.get(), 
assignedShardingItems, ExecutionType.FAILOVER));    
+                result.add(new 
JobContext(cloudJobConfig.get().toCloudJobConfiguration(), 
assignedShardingItems, ExecutionType.FAILOVER));
             }
         }
         return result;
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyService.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyService.java
index 8e0bf42..48689e4 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyService.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyService.java
@@ -19,8 +19,8 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.state.ready;
 
 import com.google.common.base.Strings;
 import lombok.extern.slf4j.Slf4j;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import org.apache.shardingsphere.elasticjob.infra.context.ExecutionType;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
 import org.apache.shardingsphere.elasticjob.cloud.scheduler.context.JobContext;
@@ -67,13 +67,13 @@ public final class ReadyService {
             log.warn("Cannot add transient job, caused by read state queue 
size is larger than {}.", 
env.getFrameworkConfiguration().getJobStateQueueSize());
             return;
         }
-        Optional<CloudJobConfiguration> cloudJobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
configService.load(jobName);
         if (!cloudJobConfig.isPresent() || CloudJobExecutionType.TRANSIENT != 
cloudJobConfig.get().getJobExecutionType()) {
             return;
         }
         String readyJobNode = ReadyNode.getReadyJobNodePath(jobName);
         String times = regCenter.getDirectly(readyJobNode);
-        if (cloudJobConfig.get().getJobConfig().isMisfire()) {
+        if (cloudJobConfig.get().isMisfire()) {
             regCenter.persist(readyJobNode, Integer.toString(null == times ? 1 
: Integer.parseInt(times) + 1));
         } else {
             regCenter.persist(ReadyNode.getReadyJobNodePath(jobName), "1");
@@ -90,7 +90,7 @@ public final class ReadyService {
             log.warn("Cannot add daemon job, caused by read state queue size 
is larger than {}.", env.getFrameworkConfiguration().getJobStateQueueSize());
             return;
         }
-        Optional<CloudJobConfiguration> cloudJobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
configService.load(jobName);
         if (!cloudJobConfig.isPresent() || CloudJobExecutionType.DAEMON != 
cloudJobConfig.get().getJobExecutionType() || 
runningService.isJobRunning(jobName)) {
             return;
         }
@@ -103,7 +103,7 @@ public final class ReadyService {
      * @param jobName job name
      */
     public void setMisfireDisabled(final String jobName) {
-        Optional<CloudJobConfiguration> cloudJobConfig = 
configService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
configService.load(jobName);
         if (cloudJobConfig.isPresent() && null != 
regCenter.getDirectly(ReadyNode.getReadyJobNodePath(jobName))) {
             regCenter.persist(ReadyNode.getReadyJobNodePath(jobName), "1");
         }
@@ -126,13 +126,13 @@ public final class ReadyService {
             if (ineligibleJobNames.contains(each)) {
                 continue;
             }
-            Optional<CloudJobConfiguration> jobConfig = 
configService.load(each);
+            Optional<CloudJobConfigurationPOJO> jobConfig = 
configService.load(each);
             if (!jobConfig.isPresent()) {
                 regCenter.remove(ReadyNode.getReadyJobNodePath(each));
                 continue;
             }
             if (!runningService.isJobRunning(each)) {
-                result.add(JobContext.from(jobConfig.get(), 
ExecutionType.READY));
+                
result.add(JobContext.from(jobConfig.get().toCloudJobConfiguration(), 
ExecutionType.READY));
             }
         }
         return result;
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/running/RunningService.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/running/RunningService.java
index cec47fe..646f9a9 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/running/RunningService.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/running/RunningService.java
@@ -20,9 +20,9 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.state.running;
 import com.google.common.collect.Sets;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import org.apache.shardingsphere.elasticjob.infra.context.TaskContext;
 import org.apache.shardingsphere.elasticjob.infra.context.TaskContext.MetaInfo;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
 import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
@@ -96,7 +96,7 @@ public final class RunningService {
     }
     
     private boolean isDaemon(final String jobName) {
-        Optional<CloudJobConfiguration> cloudJobConfig = 
configurationService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
configurationService.load(jobName);
         return cloudJobConfig.isPresent() && CloudJobExecutionType.DAEMON == 
cloudJobConfig.get().getJobExecutionType();
     }
     
@@ -152,7 +152,7 @@ public final class RunningService {
     }
     
     private boolean isDaemonOrAbsent(final String jobName) {
-        Optional<CloudJobConfiguration> cloudJobConfigurationOptional = 
configurationService.load(jobName);
+        Optional<CloudJobConfigurationPOJO> cloudJobConfigurationOptional = 
configurationService.load(jobName);
         return !cloudJobConfigurationOptional.isPresent() || 
CloudJobExecutionType.DAEMON == 
cloudJobConfigurationOptional.get().getJobExecutionType();
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/statistics/StatisticManager.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/statistics/StatisticManager.java
index fbd25e4..6cb0cb1 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/statistics/StatisticManager.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/main/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/statistics/StatisticManager.java
@@ -20,8 +20,8 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.statistics;
 import lombok.AccessLevel;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.statistics.job.JobRunningStatisticJob;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.statistics.job.RegisteredJobStatisticJob;
@@ -212,7 +212,7 @@ public final class StatisticManager {
     public JobExecutionTypeStatistics getJobExecutionTypeStatistics() {
         int transientJobCnt = 0;
         int daemonJobCnt = 0;
-        for (CloudJobConfiguration each : configurationService.loadAll()) {
+        for (CloudJobConfigurationPOJO each : configurationService.loadAll()) {
             if 
(CloudJobExecutionType.TRANSIENT.equals(each.getJobExecutionType())) {
                 transientJobCnt++;
             } else if 
(CloudJobExecutionType.DAEMON.equals(each.getJobExecutionType())) {
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationServiceTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationServiceTest.java
index 6865616..97428ab 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationServiceTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/config/job/CloudJobConfigurationServiceTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job;
 
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.fixture.CloudJobConfigurationBuilder;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.fixture.CloudJsonConstants;
 import org.apache.shardingsphere.elasticjob.reg.base.CoordinatorRegistryCenter;
@@ -67,14 +67,14 @@ public final class CloudJobConfigurationServiceTest {
     
     @Test
     public void assertAdd() {
-        CloudJobConfiguration cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
+        CloudJobConfigurationPOJO cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
         configService.add(cloudJobConfig);
         verify(regCenter).persist("/config/job/test_job", YAML);
     }
     
     @Test
     public void assertUpdate() {
-        CloudJobConfiguration cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
+        CloudJobConfigurationPOJO cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
         configService.update(cloudJobConfig);
         verify(regCenter).update("/config/job/test_job", YAML);
     }
@@ -91,9 +91,9 @@ public final class CloudJobConfigurationServiceTest {
         when(regCenter.isExisted("/config/job")).thenReturn(true);
         
when(regCenter.getChildrenKeys(CloudJobConfigurationNode.ROOT)).thenReturn(Arrays.asList("test_job_1",
 "test_job_2"));
         
when(regCenter.get("/config/job/test_job_1")).thenReturn(CloudJsonConstants.getJobJson("test_job_1"));
-        Collection<CloudJobConfiguration> actual = configService.loadAll();
+        Collection<CloudJobConfigurationPOJO> actual = configService.loadAll();
         assertThat(actual.size(), is(1));
-        assertThat(actual.iterator().next().getJobConfig().getJobName(), 
is("test_job_1"));
+        assertThat(actual.iterator().next().getJobName(), is("test_job_1"));
         verify(regCenter).isExisted("/config/job");
         verify(regCenter).getChildrenKeys("/config/job");
         verify(regCenter).get("/config/job/test_job_1");
@@ -108,15 +108,15 @@ public final class CloudJobConfigurationServiceTest {
     @Test
     public void assertLoadWithConfig() {
         
when(regCenter.get("/config/job/test_job")).thenReturn(CloudJsonConstants.getJobJson());
-        Optional<CloudJobConfiguration> actual = 
configService.load("test_job");
+        Optional<CloudJobConfigurationPOJO> actual = 
configService.load("test_job");
         assertTrue(actual.isPresent());
-        assertThat(actual.get().getJobConfig().getJobName(), is("test_job"));
+        assertThat(actual.get().getJobName(), is("test_job"));
     }
     
     @Test
     public void assertLoadWithSpringConfig() {
         
when(regCenter.get("/config/job/test_spring_job")).thenReturn(CloudJsonConstants.getSpringJobJson());
-        Optional<CloudJobConfiguration> actual = 
configService.load("test_spring_job");
+        Optional<CloudJobConfigurationPOJO> actual = 
configService.load("test_spring_job");
         assertTrue(actual.isPresent());
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/context/JobContextTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/context/JobContextTest.java
index 76d9cfd..4e7990b 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/context/JobContextTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/context/JobContextTest.java
@@ -29,7 +29,7 @@ public final class JobContextTest {
     
     @Test
     public void assertFrom() {
-        CloudJobConfiguration cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
+        CloudJobConfiguration cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job").toCloudJobConfiguration();
         JobContext actual = JobContext.from(cloudJobConfig, 
ExecutionType.READY);
         assertThat(actual.getAssignedShardingItems().size(), is(10));
         for (int i = 0; i < actual.getAssignedShardingItems().size(); i++) {
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJobConfigurationBuilder.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJobConfigurationBuilder.java
index 49dac7c..974d453 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJobConfigurationBuilder.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJobConfigurationBuilder.java
@@ -22,6 +22,7 @@ import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.elasticjob.api.JobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.dataflow.props.DataflowJobProperties;
 import org.apache.shardingsphere.elasticjob.script.props.ScriptJobProperties;
 
@@ -34,9 +35,9 @@ public final class CloudJobConfigurationBuilder {
      * @param jobName job name
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration createCloudJobConfiguration(final 
String jobName) {
-        return new CloudJobConfiguration("test_app", 1.0d, 128.0d, 
CloudJobExecutionType.TRANSIENT, 
-                JobConfiguration.newBuilder(jobName, 10).cron("0/30 * * * * 
?").failover(true).misfire(true).build());
+    public static CloudJobConfigurationPOJO createCloudJobConfiguration(final 
String jobName) {
+        return CloudJobConfigurationPOJO.fromCloudJobConfiguration(new 
CloudJobConfiguration("test_app", 1.0d, 128.0d, CloudJobExecutionType.TRANSIENT,
+                JobConfiguration.newBuilder(jobName, 10).cron("0/30 * * * * 
?").failover(true).misfire(true).build()));
     }
     
     /**
@@ -46,8 +47,9 @@ public final class CloudJobConfigurationBuilder {
      * @param jobExecutionType job execution type
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration createCloudJobConfiguration(final 
String jobName, final CloudJobExecutionType jobExecutionType) {
-        return new CloudJobConfiguration("test_app", 1.0d, 128.0d, 
jobExecutionType, JobConfiguration.newBuilder(jobName, 10).cron("0/30 * * * * 
?").failover(true).misfire(true).build());
+    public static CloudJobConfigurationPOJO createCloudJobConfiguration(final 
String jobName, final CloudJobExecutionType jobExecutionType) {
+        return CloudJobConfigurationPOJO.fromCloudJobConfiguration(new 
CloudJobConfiguration("test_app", 1.0d, 128.0d,
+                jobExecutionType, JobConfiguration.newBuilder(jobName, 
10).cron("0/30 * * * * ?").failover(true).misfire(true).build()));
     }
     
     /**
@@ -70,9 +72,9 @@ public final class CloudJobConfigurationBuilder {
      * @param misfire misfire
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration createCloudJobConfiguration(final 
String jobName, final boolean misfire) {
-        return new CloudJobConfiguration("test_app", 1.0d, 128.0d, 
CloudJobExecutionType.TRANSIENT, 
-                JobConfiguration.newBuilder(jobName, 10).cron("0/30 * * * * 
?").failover(true).misfire(misfire).build());
+    public static CloudJobConfigurationPOJO createCloudJobConfiguration(final 
String jobName, final boolean misfire) {
+        return CloudJobConfigurationPOJO.fromCloudJobConfiguration(new 
CloudJobConfiguration("test_app", 1.0d, 128.0d, CloudJobExecutionType.TRANSIENT,
+                JobConfiguration.newBuilder(jobName, 10).cron("0/30 * * * * 
?").failover(true).misfire(misfire).build()));
     }
     
     /**
@@ -82,8 +84,9 @@ public final class CloudJobConfigurationBuilder {
      * @param appName app name
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration createCloudJobConfiguration(final 
String jobName, final String appName) {
-        return new CloudJobConfiguration(appName, 1.0d, 128.0d, 
CloudJobExecutionType.TRANSIENT, JobConfiguration.newBuilder(jobName, 
10).cron("0/30 * * * * ?").failover(true).misfire(true).build());
+    public static CloudJobConfigurationPOJO createCloudJobConfiguration(final 
String jobName, final String appName) {
+        return CloudJobConfigurationPOJO.fromCloudJobConfiguration(new 
CloudJobConfiguration(appName, 1.0d, 128.0d,
+                CloudJobExecutionType.TRANSIENT, 
JobConfiguration.newBuilder(jobName, 10).cron("0/30 * * * * 
?").failover(true).misfire(true).build()));
     }
     
     /**
@@ -92,9 +95,9 @@ public final class CloudJobConfigurationBuilder {
      * @param jobName job name
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration createOtherCloudJobConfiguration(final 
String jobName) {
-        return new CloudJobConfiguration(
-                "test_app", 1.0d, 128.0d, CloudJobExecutionType.TRANSIENT, 
JobConfiguration.newBuilder(jobName, 3).cron("0/30 * * * * 
?").failover(false).misfire(true).build());
+    public static CloudJobConfigurationPOJO 
createOtherCloudJobConfiguration(final String jobName) {
+        return CloudJobConfigurationPOJO.fromCloudJobConfiguration(new 
CloudJobConfiguration(
+                "test_app", 1.0d, 128.0d, CloudJobExecutionType.TRANSIENT, 
JobConfiguration.newBuilder(jobName, 3).cron("0/30 * * * * 
?").failover(false).misfire(true).build()));
     }
     
     /**
@@ -125,7 +128,7 @@ public final class CloudJobConfigurationBuilder {
      * @param jobName job name
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration 
createScriptCloudJobConfiguration(final String jobName) {
+    public static CloudJobConfigurationPOJO 
createScriptCloudJobConfiguration(final String jobName) {
         return createScriptCloudJobConfiguration(jobName, 3);
     }
     
@@ -136,8 +139,8 @@ public final class CloudJobConfigurationBuilder {
      * @param shardingTotalCount sharding total count
      * @return cloud job configuration
      */
-    public static CloudJobConfiguration 
createScriptCloudJobConfiguration(final String jobName, final int 
shardingTotalCount) {
-        return new CloudJobConfiguration("test_app", 1.0d, 128.0d, 
CloudJobExecutionType.TRANSIENT, 
-                JobConfiguration.newBuilder(jobName, 
shardingTotalCount).cron("0/30 * * * * 
?").failover(false).misfire(false).setProperty(ScriptJobProperties.SCRIPT_KEY, 
"test.sh").build());
+    public static CloudJobConfigurationPOJO 
createScriptCloudJobConfiguration(final String jobName, final int 
shardingTotalCount) {
+        return CloudJobConfigurationPOJO.fromCloudJobConfiguration(new 
CloudJobConfiguration("test_app", 1.0d, 128.0d, CloudJobExecutionType.TRANSIENT,
+                JobConfiguration.newBuilder(jobName, 
shardingTotalCount).cron("0/30 * * * * 
?").failover(false).misfire(false).setProperty(ScriptJobProperties.SCRIPT_KEY, 
"test.sh").build()));
     }
 }
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJsonConstants.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJsonConstants.java
index 3b9a3c3..b9b7112 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJsonConstants.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/fixture/CloudJsonConstants.java
@@ -23,12 +23,11 @@ import 
org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
 
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class CloudJsonConstants {
-    
-    private static final String JOB_JSON = "{\"jobName\":\"%s\","
-            + "\"cron\":\"0/30 * * * * 
?\",\"shardingTotalCount\":10,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":true,\"misfire\":%s,\"description\":\"\","
-            + "\"appName\":\"test_app\",\"cpuCount\":1.0,\"memoryMB\":128.0," 
-            + "\"jobExecutionType\":\"%s\"}";
-    
+
+    private static final String JOB_JSON = 
"{\"appName\":\"test_app\",\"cpuCount\":1.0,\"memoryMB\":128.0,\"jobExecutionType\":\"%s\",\"jobName\":\"%s\","
+            + "\"cron\":\"0/30 * * * * 
?\",\"shardingTotalCount\":10,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"monitorExecution\":false,\"failover\":true,"
+            + 
"\"misfire\":%s,\"maxTimeDiffSeconds\":0,\"reconcileIntervalMinutes\":0,\"description\":\"\",\"props\":{},\"disabled\":false,\"overwrite\":false}";
+
     private static final String SPRING_JOB_JSON = 
"{\"jobName\":\"test_spring_job\","
             + "\"cron\":\"0/30 * * * * 
?\",\"shardingTotalCount\":10,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":true,\"misfire\":true,\"description\":\"\","
             + 
"\"appName\":\"test_spring_app\",\"cpuCount\":1.0,\"memoryMB\":128.0,"
@@ -39,7 +38,7 @@ public final class CloudJsonConstants {
      * @return job in json format
      */
     public static String getJobJson() {
-        return String.format(JOB_JSON, "test_job", true, "TRANSIENT");
+        return String.format(JOB_JSON, "TRANSIENT", "test_job", true);
     }
     
     /**
@@ -48,7 +47,7 @@ public final class CloudJsonConstants {
      * @return job in json format
      */
     public static String getJobJson(final String jobName) {
-        return String.format(JOB_JSON, jobName, true, "TRANSIENT");
+        return String.format(JOB_JSON, "TRANSIENT", jobName, true);
     }
     
     /**
@@ -57,7 +56,7 @@ public final class CloudJsonConstants {
      * @return job in json format
      */
     public static String getJobJson(final CloudJobExecutionType 
jobExecutionType) {
-        return String.format(JOB_JSON, "test_job", true, 
jobExecutionType.name());
+        return String.format(JOB_JSON, jobExecutionType.name(), "test_job", 
true);
     }
     
     /**
@@ -66,7 +65,7 @@ public final class CloudJsonConstants {
      * @return job in json format
      */
     public static String getJobJson(final boolean misfire) {
-        return String.format(JOB_JSON, "test_job", misfire, "TRANSIENT");
+        return String.format(JOB_JSON, "TRANSIENT", "test_job", misfire);
     }
     
     /**
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeServiceTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeServiceTest.java
index ca8e0f2..368dfcc 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeServiceTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/FacadeServiceTest.java
@@ -21,6 +21,7 @@ import com.google.common.collect.Sets;
 import org.apache.shardingsphere.elasticjob.cloud.ReflectionUtils;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfigurationService;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.job.CloudJobConfigurationService;
@@ -109,8 +110,10 @@ public final class FacadeServiceTest {
     
     @Test
     public void assertGetEligibleJobContext() {
-        Collection<JobContext> failoverJobContexts = 
Collections.singletonList(JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("failover_job"),
 ExecutionType.FAILOVER));
-        Collection<JobContext> readyJobContexts = 
Collections.singletonList(JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("ready_job"),
 ExecutionType.READY));
+        Collection<JobContext> failoverJobContexts = 
Collections.singletonList(JobContext.from(CloudJobConfigurationBuilder
+                
.createCloudJobConfiguration("failover_job").toCloudJobConfiguration(), 
ExecutionType.FAILOVER));
+        Collection<JobContext> readyJobContexts = 
Collections.singletonList(JobContext.from(CloudJobConfigurationBuilder
+                
.createCloudJobConfiguration("ready_job").toCloudJobConfiguration(), 
ExecutionType.READY));
         
when(failoverService.getAllEligibleJobContexts()).thenReturn(failoverJobContexts);
         
when(readyService.getAllEligibleJobContexts(failoverJobContexts)).thenReturn(readyJobContexts);
         Collection<JobContext> actual = facadeService.getEligibleJobContext();
@@ -204,7 +207,7 @@ public final class FacadeServiceTest {
     
     @Test
     public void assertLoadJobConfig() {
-        Optional<CloudJobConfiguration> cloudJobConfig = 
Optional.of(CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job"));
+        Optional<CloudJobConfigurationPOJO> cloudJobConfig = 
Optional.of(CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job"));
         when(jobConfigService.load("test_job")).thenReturn(cloudJobConfig);
         assertThat(facadeService.load("test_job"), is(cloudJobConfig));
     }
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/JobTaskRequestTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/JobTaskRequestTest.java
index fd6e89e..cc1a384 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/JobTaskRequestTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/JobTaskRequestTest.java
@@ -34,7 +34,7 @@ public final class JobTaskRequestTest {
     
     private final JobTaskRequest jobTaskRequest = 
             new JobTaskRequest(new TaskContext("test_job", 
Collections.singletonList(0), ExecutionType
-                    .READY, "unassigned-slave"), 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job"));
+                    .READY, "unassigned-slave"), 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job").toCloudJobConfiguration());
     
     @Test
     public void assertGetId() {
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/LaunchingTasksTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/LaunchingTasksTest.java
index 6a19ac9..3f8df72 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/LaunchingTasksTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/LaunchingTasksTest.java
@@ -70,8 +70,8 @@ public final class LaunchingTasksTest {
         ReflectionUtils.setFieldValue(facadeService, "runningService", 
runningService);
         ReflectionUtils.setFieldValue(facadeService, "failoverService", 
failoverService);
         when(facadeService.getEligibleJobContext()).thenReturn(Arrays.asList(
-                
JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("ready_job"),
 ExecutionType.READY),
-                
JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("failover_job"),
 ExecutionType.FAILOVER)));
+                
JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("ready_job").toCloudJobConfiguration(),
 ExecutionType.READY),
+                
JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("failover_job").toCloudJobConfiguration(),
 ExecutionType.FAILOVER)));
         launchingTasks = new 
LaunchingTasks(facadeService.getEligibleJobContext());
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskInfoDataTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskInfoDataTest.java
index a895ae4..a764625 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskInfoDataTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskInfoDataTest.java
@@ -35,7 +35,7 @@ public final class TaskInfoDataTest {
     
     @Test
     public void assertSerializeSimpleJob() {
-        TaskInfoData actual = new TaskInfoData(shardingContexts, 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job"));
+        TaskInfoData actual = new TaskInfoData(shardingContexts, 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job").toCloudJobConfiguration());
         assertSerialize(SerializationUtils.deserialize(actual.serialize()));
     }
     
@@ -47,7 +47,7 @@ public final class TaskInfoDataTest {
     
     @Test
     public void assertSerializeScriptJob() {
-        TaskInfoData actual = new TaskInfoData(shardingContexts, 
CloudJobConfigurationBuilder.createScriptCloudJobConfiguration("test_job"));
+        TaskInfoData actual = new TaskInfoData(shardingContexts, 
CloudJobConfigurationBuilder.createScriptCloudJobConfiguration("test_job").toCloudJobConfiguration());
         assertSerialize(SerializationUtils.deserialize(actual.serialize()));
     }
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledServiceTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledServiceTest.java
index 212662d..bd682c5 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledServiceTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/mesos/TaskLaunchScheduledServiceTest.java
@@ -106,7 +106,7 @@ public final class TaskLaunchScheduledServiceTest {
     @Test
     public void assertRunOneIterationWithScriptJob() {
         when(facadeService.getEligibleJobContext()).thenReturn(
-                
Collections.singletonList(JobContext.from(CloudJobConfigurationBuilder.createScriptCloudJobConfiguration("script_job",
 1), ExecutionType.READY)));
+                
Collections.singletonList(JobContext.from(CloudJobConfigurationBuilder.createScriptCloudJobConfiguration("script_job",
 1).toCloudJobConfiguration(), ExecutionType.READY)));
         Map<String, VMAssignmentResult> vmAssignmentResultMap = new 
HashMap<>();
         vmAssignmentResultMap.put("rs1", new VMAssignmentResult("localhost", 
Collections.singletonList(new 
VMLeaseObject(OfferBuilder.createOffer("offer_0"))),
                 Sets.newHashSet(mockTaskAssignmentResult("script_job", 
ExecutionType.READY))));
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManagerTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManagerTest.java
index 9242d8f..5b4a573 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManagerTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/ProducerManagerTest.java
@@ -20,8 +20,8 @@ package 
org.apache.shardingsphere.elasticjob.cloud.scheduler.producer;
 import org.apache.mesos.Protos;
 import org.apache.mesos.SchedulerDriver;
 import org.apache.shardingsphere.elasticjob.cloud.ReflectionUtils;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
 import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobExecutionType;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.exception.AppConfigurationException;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfiguration;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.config.app.CloudAppConfigurationService;
@@ -80,9 +80,9 @@ public final class ProducerManagerTest {
     
     private final CloudAppConfiguration appConfig = 
CloudAppConfigurationBuilder.createCloudAppConfiguration("test_app");
     
-    private final CloudJobConfiguration transientJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("transient_test_job");
+    private final CloudJobConfigurationPOJO transientJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("transient_test_job");
     
-    private final CloudJobConfiguration daemonJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("daemon_test_job", 
CloudJobExecutionType.DAEMON);
+    private final CloudJobConfigurationPOJO daemonJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("daemon_test_job", 
CloudJobExecutionType.DAEMON);
 
     @Before
     public void setUp() {
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerSchedulerTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerSchedulerTest.java
index 0779718..ce93fe2 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerSchedulerTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/producer/TransientProducerSchedulerTest.java
@@ -18,7 +18,7 @@
 package org.apache.shardingsphere.elasticjob.cloud.scheduler.producer;
 
 import org.apache.shardingsphere.elasticjob.cloud.ReflectionUtils;
-import org.apache.shardingsphere.elasticjob.cloud.config.CloudJobConfiguration;
+import 
org.apache.shardingsphere.elasticjob.cloud.config.pojo.CloudJobConfigurationPOJO;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.fixture.CloudJobConfigurationBuilder;
 import 
org.apache.shardingsphere.elasticjob.cloud.scheduler.state.ready.ReadyService;
 import org.junit.Before;
@@ -49,12 +49,12 @@ public final class TransientProducerSchedulerTest {
 
     private TransientProducerScheduler transientProducerScheduler;
     
-    private final CloudJobConfiguration cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
+    private final CloudJobConfigurationPOJO cloudJobConfig = 
CloudJobConfigurationBuilder.createCloudJobConfiguration("test_job");
     
-    private final JobDetail jobDetail = 
JobBuilder.newJob(TransientProducerScheduler.ProducerJob.class).withIdentity(cloudJobConfig.getJobConfig().getCron()).build();
+    private final JobDetail jobDetail = 
JobBuilder.newJob(TransientProducerScheduler.ProducerJob.class).withIdentity(cloudJobConfig.getCron()).build();
     
-    private final Trigger trigger = 
TriggerBuilder.newTrigger().withIdentity(cloudJobConfig.getJobConfig().getCron())
-                        
.withSchedule(CronScheduleBuilder.cronSchedule(cloudJobConfig.getJobConfig().getCron())
+    private final Trigger trigger = 
TriggerBuilder.newTrigger().withIdentity(cloudJobConfig.getCron())
+                        
.withSchedule(CronScheduleBuilder.cronSchedule(cloudJobConfig.getCron())
                         .withMisfireHandlingInstructionDoNothing()).build();
     
     @Before
@@ -74,7 +74,7 @@ public final class TransientProducerSchedulerTest {
     @Test
     public void assertDeregister() throws SchedulerException {
         transientProducerScheduler.deregister(cloudJobConfig);
-        
verify(scheduler).unscheduleJob(TriggerKey.triggerKey(cloudJobConfig.getJobConfig().getCron()));
+        
verify(scheduler).unscheduleJob(TriggerKey.triggerKey(cloudJobConfig.getCron()));
     }
     
     @Test
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApiTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApiTest.java
index 5960f69..7749f54 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApiTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/restful/CloudJobRestfulApiTest.java
@@ -62,17 +62,15 @@ public final class CloudJobRestfulApiTest extends 
AbstractCloudRestfulApiTest {
             + "description: ''\n"
             + "disabled: false\n"
             + "failover: true\n"
-            + "jobErrorHandlerType: ''\n"
             + "jobExecutionType: TRANSIENT\n"
-            + "jobExecutorServiceHandlerType: ''\n"
             + "jobName: test_job\n"
             + "jobParameter: ''\n"
-            + "maxTimeDiffSeconds: -1\n"
+            + "maxTimeDiffSeconds: 0\n"
             + "memoryMB: 128.0\n"
             + "misfire: true\n"
-            + "monitorExecution: true\n"
+            + "monitorExecution: false\n"
             + "overwrite: false\n"
-            + "reconcileIntervalMinutes: 10\n"
+            + "reconcileIntervalMinutes: 0\n"
             + "shardingItemParameters: ''\n"
             + "shardingTotalCount: 10\n";
     
diff --git 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyServiceTest.java
 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyServiceTest.java
index 53be431..3fb898f 100755
--- 
a/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyServiceTest.java
+++ 
b/elasticjob-cloud/elasticjob-cloud-scheduler/src/test/java/org/apache/shardingsphere/elasticjob/cloud/scheduler/state/ready/ReadyServiceTest.java
@@ -204,7 +204,7 @@ public final class ReadyServiceTest {
         when(runningService.isJobRunning("running_job")).thenReturn(true);
         when(runningService.isJobRunning("eligible_job")).thenReturn(false);
         
assertThat(readyService.getAllEligibleJobContexts(Collections.singletonList(
-                
JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("ineligible_job"),
 ExecutionType.READY))).size(), is(1));
+                
JobContext.from(CloudJobConfigurationBuilder.createCloudJobConfiguration("ineligible_job").toCloudJobConfiguration(),
 ExecutionType.READY))).size(), is(1));
         verify(regCenter).isExisted("/state/ready");
         verify(regCenter, times(1)).getChildrenKeys("/state/ready");
         verify(configService).load("not_existed_job");

Reply via email to