You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/06/21 12:32:28 UTC

[shardingsphere-elasticjob-lite] branch master updated: Use SPI to introduce job sharding strategy (#805)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 4d9d3c8  Use SPI to introduce job sharding strategy (#805)
4d9d3c8 is described below

commit 4d9d3c851e32e6adc71a56657613d4b34a355835
Author: Liang Zhang <te...@163.com>
AuthorDate: Sun Jun 21 20:32:21 2020 +0800

    Use SPI to introduce job sharding strategy (#805)
    
    * add final for OdevitySortByNameJobShardingStrategy & RotateServerByNameJobShardingStrategy
    
    * Use job-sharding-strategy-type with SPI to instead of job-sharding-strategy-class
---
 docs/content/02-guide/config-manual.md             | 50 +++++++++++-----------
 docs/content/02-guide/job-sharding-strategy.md     |  2 +-
 .../console/html/status/job/job_config.html        |  4 +-
 .../resources/console/i18n/message_en.properties   |  4 +-
 .../resources/console/i18n/message_zh.properties   |  4 +-
 .../resources/console/js/status/job/job_config.js  |  4 +-
 .../console/js/status/job/jobs_status_overview.js  |  2 +-
 .../lite/api/strategy/JobShardingStrategy.java     |  7 +++
 .../api/strategy/JobShardingStrategyFactory.java   | 34 +++++++++------
 .../impl/AverageAllocationJobShardingStrategy.java |  5 +++
 .../impl/OdevitySortByNameJobShardingStrategy.java |  7 ++-
 ...va => RoundRobinByNameJobShardingStrategy.java} | 11 +++--
 .../lite/config/LiteJobConfiguration.java          | 16 +++----
 .../config/LiteJobConfigurationConstants.java      |  2 +-
 .../config/LiteJobConfigurationGsonFactory.java    |  8 ++--
 .../lite/internal/sharding/ShardingService.java    |  2 +-
 ...lasticjob.lite.api.strategy.JobShardingStrategy | 20 +++++++++
 .../strategy/JobShardingStrategyFactoryTest.java   | 17 ++------
 .../fixture/InvalidJobShardingStrategy.java        | 35 ---------------
 .../RotateServerByNameJobShardingStrategyTest.java |  2 +-
 .../lite/config/LiteJobConfigurationTest.java      |  8 ++--
 .../elasticjob/lite/fixture/LiteJsonConstants.java |  2 +-
 .../LiteJobConfigurationGsonFactoryTest.java       | 14 +++---
 .../lite/lifecycle/domain/JobSettings.java         |  2 +-
 .../internal/settings/JobSettingsAPIImpl.java      |  2 +-
 .../lifecycle/fixture/LifecycleJsonConstants.java  |  6 +--
 .../internal/settings/JobSettingsAPIImplTest.java  |  2 +-
 .../common/AbstractJobBeanDefinitionParser.java    |  2 +-
 .../common/BaseJobBeanDefinitionParserTag.java     |  2 +-
 .../src/main/resources/META-INF/namespace/job.xsd  |  2 +-
 30 files changed, 140 insertions(+), 138 deletions(-)

diff --git a/docs/content/02-guide/config-manual.md b/docs/content/02-guide/config-manual.md
index c84e061..2ba9ab9 100644
--- a/docs/content/02-guide/config-manual.md
+++ b/docs/content/02-guide/config-manual.md
@@ -75,7 +75,7 @@ JobTypeConfiguration根据不同实现类型分为SimpleJobConfiguration,Dataf
 | monitorExecution         | boolean              | 否       |true             | 监控作业运行时状态<br />每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。<br />每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。 |
 | monitorPort              | int                  | 否       |-1               | 作业监控端口<br />建议配置作业监控端口, 方便开发者dump作业信息。<br />使用方法: echo "dump" \| nc 127.0.0.1 9888 |
 | maxTimeDiffSeconds       | int                  | 否       |-1               | 最大允许的本机与注册中心的时间误差秒数<br />如果时间误差超过配置秒数则作业启动时将抛异常<br />配置为-1表示不校验时间误差 |
-| jobShardingStrategyClass | String               | 否       |-1               | 作业分片策略实现类全路径<br />默认使用平均分配策略<br />详情参见:[作业分片策略](/02-guide/job-sharding-strategy) |
+| jobShardingStrategyType | String               | 否       |-1               | 作业分片策略实现类全路径<br />默认使用平均分配策略<br />详情参见:[作业分片策略](/02-guide/job-sharding-strategy) |
 | reconcileIntervalMinutes | int                  | 否       |10               | 修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复<br />单位:分钟 |
 | eventTraceRdbDataSource  | String               | 否       |                 | 作业事件追踪的数据源Bean引用 |
 
@@ -112,30 +112,30 @@ Spring命名空间与Java Code方式配置类似,大部分属性只是将命
 
 #### job:simple命名空间属性详细说明
 
-| 属性名                               | 类型    | 是否必填 | 缺省值           | 描述                                                                       |
-| ------------------------------------|:--------|:--------|:----------------|:---------------------------------------------------------------------------|
-| id                                  | String  | 是      |                 | 作业名称                                                                    |
-| class                               | String  | 否      |                 | 作业实现类,需实现ElasticJob接口                                              |
-| job-ref                             | String  | 否      |                 | 作业关联的beanId,该配置优先级大于class属性配置                                 |
-| registry-center-ref                 | String  | 是      |                 | 注册中心Bean的引用,需引用reg:zookeeper的声明                                  |
-| cron                                | String  | 是      |                 | cron表达式,用于控制作业触发时间                                               |
-| sharding-total-count                | int     | 是      |                 | 作业分片总数                                                                 |
-| sharding-item-parameters            | String  | 否      |                 | 分片序列号和参数用等号分隔,多个键值对用逗号分隔<br />分片序列号从0开始,不可大于或等于作业分片总数<br />如:<br/>0=a,1=b,2=c|
-| job-instance-id                     | String  | 否      | defaultInstance | 作业实例主键,同IP可运行实例主键不同, 但名称相同的多个作业实例                     |
-| job-parameter                       | String  | 否      |                 | 作业自定义参数<br />作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业<br />例:每次获取的数据量、作业实例从数据库读取的主键等 |
-| monitor-execution                   | boolean | 否      | true            | 监控作业运行时状态<br />每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。<br />每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。|
-| monitor-port                        | int     | 否      | -1              | 作业监控端口<br />建议配置作业监控端口, 方便开发者dump作业信息。<br />使用方法: echo "dump" \| nc 127.0.0.1 9888|
-| max-time-diff-seconds               | int     | 否      | -1              | 最大允许的本机与注册中心的时间误差秒数<br />如果时间误差超过配置秒数则作业启动时将抛异常<br />配置为-1表示不校验时间误差|
-| failover                            | boolean | 否      | false           | 是否开启失效转移                                                              |
-| misfire                             | boolean | 否      | true            | 是否开启错过任务重新执行                                                       |
-| job-sharding-strategy-class         | String  | 否      |                 | 作业分片策略实现类全路径<br />默认使用平均分配策略<br />详情参见:[作业分片策略](/02-guide/job-sharding-strategy)|
-| description                         | String  | 否      |                 | 作业描述信息                                                                 |
-| disabled                            | boolean | 否      | false           | 作业是否禁止启动<br />可用于部署作业时,先禁止启动,部署结束后统一启动              |
-| overwrite                           | boolean | 否      | false           | 本地配置是否可覆盖注册中心配置<br />如果可覆盖,每次启动作业都以本地配置为准         |
-| job-exception-handler               | String  | 否      |                 | 扩展异常处理类                                                               |
-| executor-service-handler            | String  | 否      |                 | 扩展作业处理线程池类                                                          |
-| reconcile-interval-minutes          | int     | 否      | 10              | 修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复<br />单位:分钟 |
-| event-trace-rdb-data-source         | String  | 否      |                 | 作业事件追踪的数据源Bean引用                                                   |
+| 属性名                       | 类型    | 是否必填 | 缺省值           | 描述                                                                       |
+| ----------------------------|:--------|:--------|:----------------|:---------------------------------------------------------------------------|
+| id                          | String  | 是      |                 | 作业名称                                                                    |
+| class                       | String  | 否      |                 | 作业实现类,需实现ElasticJob接口                                              |
+| job-ref                     | String  | 否      |                 | 作业关联的beanId,该配置优先级大于class属性配置                                 |
+| registry-center-ref         | String  | 是      |                 | 注册中心Bean的引用,需引用reg:zookeeper的声明                                  |
+| cron                        | String  | 是      |                 | cron表达式,用于控制作业触发时间                                               |
+| sharding-total-count        | int     | 是      |                 | 作业分片总数                                                                 |
+| sharding-item-parameters    | String  | 否      |                 | 分片序列号和参数用等号分隔,多个键值对用逗号分隔<br />分片序列号从0开始,不可大于或等于作业分片总数<br />如:<br/>0=a,1=b,2=c|
+| job-instance-id             | String  | 否      | defaultInstance | 作业实例主键,同IP可运行实例主键不同, 但名称相同的多个作业实例                     |
+| job-parameter               | String  | 否      |                 | 作业自定义参数<br />作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业<br />例:每次获取的数据量、作业实例从数据库读取的主键等 |
+| monitor-execution           | boolean | 否      | true            | 监控作业运行时状态<br />每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。<br />每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。|
+| monitor-port                | int     | 否      | -1              | 作业监控端口<br />建议配置作业监控端口, 方便开发者dump作业信息。<br />使用方法: echo "dump" \| nc 127.0.0.1 9888|
+| max-time-diff-seconds       | int     | 否      | -1              | 最大允许的本机与注册中心的时间误差秒数<br />如果时间误差超过配置秒数则作业启动时将抛异常<br />配置为-1表示不校验时间误差|
+| failover                    | boolean | 否      | false           | 是否开启失效转移                                                              |
+| misfire                     | boolean | 否      | true            | 是否开启错过任务重新执行                                                       |
+| job-sharding-strategy-type  | String  | 否      |                 | 作业分片策略实现类全路径<br />默认使用平均分配策略<br />详情参见:[作业分片策略](/02-guide/job-sharding-strategy)|
+| description                 | String  | 否      |                 | 作业描述信息                                                                 |
+| disabled                    | boolean | 否      | false           | 作业是否禁止启动<br />可用于部署作业时,先禁止启动,部署结束后统一启动              |
+| overwrite                   | boolean | 否      | false           | 本地配置是否可覆盖注册中心配置<br />如果可覆盖,每次启动作业都以本地配置为准         |
+| job-exception-handler       | String  | 否      |                 | 扩展异常处理类                                                               |
+| executor-service-handler    | String  | 否      |                 | 扩展作业处理线程池类                                                          |
+| reconcile-interval-minutes  | int     | 否      | 10              | 修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复<br />单位:分钟 |
+| event-trace-rdb-data-source | String  | 否      |                 | 作业事件追踪的数据源Bean引用                                                   |
 
 #### job:dataflow命名空间属性详细说明
 
diff --git a/docs/content/02-guide/job-sharding-strategy.md b/docs/content/02-guide/job-sharding-strategy.md
index 13185a5..63d443f 100644
--- a/docs/content/02-guide/job-sharding-strategy.md
+++ b/docs/content/02-guide/job-sharding-strategy.md
@@ -68,5 +68,5 @@ io.elasticjob.lite.api.strategy.impl.RotateServerByNameJobShardingStrategy
 
 ## 配置分片策略
 
-与配置通常的作业属性相同,在spring命名空间或者JobConfiguration中配置jobShardingStrategyClass属性,属性值是作业分片策略类的全路径。
+与配置通常的作业属性相同,在spring命名空间或者JobConfiguration中配置jobShardingStrategyType属性,属性值是作业分片策略类的全路径。
 
diff --git a/elastic-job-lite-console/src/main/resources/console/html/status/job/job_config.html b/elastic-job-lite-console/src/main/resources/console/html/status/job/job_config.html
index c347bb0..3822426 100644
--- a/elastic-job-lite-console/src/main/resources/console/html/status/job/job_config.html
+++ b/elastic-job-lite-console/src/main/resources/console/html/status/job/job_config.html
@@ -133,9 +133,9 @@
                     </div>
                 </div>
                 <div class="form-group">
-                    <label for="job-sharding-strategy-class" class="col-sm-2 control-label" data-lang="job-sharding-strategy-class"></label>
+                    <label for="job-sharding-strategy-type" class="col-sm-2 control-label" data-lang="job-sharding-strategy-type"></label>
                     <div class="col-sm-9">
-                        <input type="text" id="job-sharding-strategy-class" name="jobShardingStrategyClass" class="form-control" data-toggle="tooltip" data-placement="bottom" title="默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略" />
+                        <input type="text" id="job-sharding-strategy-type" name="jobShardingStrategyType" class="form-control" data-toggle="tooltip" data-placement="bottom" title="默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略" />
                     </div>
                 </div>
                 <div class="form-group">
diff --git a/elastic-job-lite-console/src/main/resources/console/i18n/message_en.properties b/elastic-job-lite-console/src/main/resources/console/i18n/message_en.properties
index 433a842..e36dc84 100644
--- a/elastic-job-lite-console/src/main/resources/console/i18n/message_en.properties
+++ b/elastic-job-lite-console/src/main/resources/console/i18n/message_en.properties
@@ -86,7 +86,7 @@ job-shardings-detail=Job shardings detail
 job-type=Job type
 job-class=Job class
 job-parameter=Job parameter
-job-sharding-strategy-class=Job sharding strategy class
+job-sharding-strategy-type=Job sharding strategy type
 job-exception-handler=Job exception handler
 job-cron=Crontab
 job-sharding-total-count=Sharding total count
@@ -122,7 +122,7 @@ placeholder-failover=Whether open task execution failure, open said if the job t
 placeholder-misfire=Whether the task is open misses the reexecution
 placeholder-streaming-process=If the data is processed, fetch data will not return empty results and will continue to perform the work. If the data is not flowing, the data is processed and the job is finished
 placeholder-sharding-item-parameters=Separate serial Numbers and parameters are separated by equals, and multiple key values are separated by commas, similar to map. The serial serial Numbers start from 0, not greater than or equal to the total number of assignments. For example, 0 = a, 1 = b, 2 = c
-placeholder-job-sharding-strategy-class=By default, you can customize the share-chip strategy based on IP address sequentially
+placeholder-job-sharding-strategy-type=By default, you can customize the share-chip strategy based on IP address sequentially
 placeholder-job-exception-handler=Extension 'JobExceptionHandler' interface, custom exception handling process, the default implementation is log but not throw an exception.
 placeholder-executor-service-handler=Extension 'ExecutorServiceHandler' interface, custom thread pool.
 placeholder-script-command-line=The full path name of the execution script can contain parameters
diff --git a/elastic-job-lite-console/src/main/resources/console/i18n/message_zh.properties b/elastic-job-lite-console/src/main/resources/console/i18n/message_zh.properties
index 9e03f5a..7be7f9b 100644
--- a/elastic-job-lite-console/src/main/resources/console/i18n/message_zh.properties
+++ b/elastic-job-lite-console/src/main/resources/console/i18n/message_zh.properties
@@ -86,7 +86,7 @@ job-shardings-detail=作业分片详情
 job-type=作业类型
 job-class=作业实现类
 job-parameter=自定义参数
-job-sharding-strategy-class=作业分片策略实现类全路径
+job-sharding-strategy-type=作业分片策略类型
 job-exception-handler=定制异常处理类全路径
 job-cron=Cron表达式
 job-sharding-total-count=作业分片总数
@@ -122,7 +122,7 @@ placeholder-failover=是否开启任务执行失效转移,开启表示如果
 placeholder-misfire=是否开启任务错过重新执行
 placeholder-streaming-process=如果流式处理数据, 则fetchData不返回空结果将持续执行作业; 如果非流式处理数据, 则处理数据完成后作业结束
 placeholder-sharding-item-parameters=分片序列号和参数用等号分隔,多个键值对用逗号分隔,类似map。分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c
-placeholder-job-sharding-strategy-class=默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略
+placeholder-job-sharding-strategy-type=默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略
 placeholder-job-exception-handler=扩展`JobExceptionHandler`接口,定制异常处理流程,默认实现是记录日志但不抛出异常。
 placeholder-executor-service-handler=扩展`ExecutorServiceHandler`接口,定制线程池。
 placeholder-script-command-line=执行脚本的全路径名称,可以包含参数
diff --git a/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js b/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
index 0fe5922..565b2b0 100644
--- a/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
+++ b/elastic-job-lite-console/src/main/resources/console/js/status/job/job_config.js
@@ -64,13 +64,13 @@ function bindSubmitJobSettingsForm() {
             var password = $("#password").val();
             var logLevel = $("#logLevel").val();
             var shardingItemParameters = $("#sharding-item-parameters").val();
-            var jobShardingStrategyClass = $("#job-sharding-strategy-class").val();
+            var jobShardingStrategyType = $("#job-sharding-strategy-type").val();
             var scriptCommandLine = $("#script-command-line").val();
             var executorServiceHandler = $("#executor-service-handler").val();
             var jobExceptionHandler = $("#job-exception-handler").val();
             var description = $("#description").val();
             var reconcileIntervalMinutes = $("#reconcile-interval-minutes").val();
-            var postJson = {jobName: jobName, jobType : jobType, shardingTotalCount: shardingTotalCount, jobParameter: jobParameter, cron: cron, streamingProcess: streamingProcess, maxTimeDiffSeconds: maxTimeDiffSeconds, monitorPort: monitorPort, monitorExecution: monitorExecution, failover: failover, misfire: misfire, shardingItemParameters: shardingItemParameters, jobShardingStrategyClass: jobShardingStrategyClass, jobProperties: {"executor_service_handler": executorServiceHandler, "jo [...]
+            var postJson = {jobName: jobName, jobType : jobType, shardingTotalCount: shardingTotalCount, jobParameter: jobParameter, cron: cron, streamingProcess: streamingProcess, maxTimeDiffSeconds: maxTimeDiffSeconds, monitorPort: monitorPort, monitorExecution: monitorExecution, failover: failover, misfire: misfire, shardingItemParameters: shardingItemParameters, jobShardingStrategyType: jobShardingStrategyType, jobProperties: {"executor_service_handler": executorServiceHandler, "job_ [...]
             var jobParams = getJobParams();
             if (jobParams.monitorExecution !== monitorExecution || jobParams.failover !== failover || jobParams.misfire !== misfire) {
                 showUpdateConfirmModal();
diff --git a/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js b/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
index 2fbed0c..cbef83e 100644
--- a/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
+++ b/elastic-job-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
@@ -233,7 +233,7 @@ function renderJob(data) {
     $("#streaming-process").attr("checked", data.streamingProcess);
     $("#max-time-diff-seconds").attr("value", data.maxTimeDiffSeconds);
     $("#monitor-port").attr("value", data.monitorPort);
-    $("#job-sharding-strategy-class").attr("value", data.jobShardingStrategyClass);
+    $("#job-sharding-strategy-type").attr("value", data.jobShardingStrategyType);
     $("#executor-service-handler").attr("value", data.jobProperties["executor_service_handler"]);
     $("#job-exception-handler").attr("value", data.jobProperties["job_exception_handler"]);
     $("#reconcile-interval-minutes").attr("value", data.reconcileIntervalMinutes);
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategy.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategy.java
index 90ebaab..26babb1 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategy.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategy.java
@@ -34,4 +34,11 @@ public interface JobShardingStrategy {
      * @return sharding result
      */
     Map<JobInstance, List<Integer>> sharding(List<JobInstance> jobInstances, String jobName, int shardingTotalCount);
+    
+    /**
+     * Get job sharding strategy type.
+     * 
+     * @return job sharding strategy type
+     */
+    String getType();
 }
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactory.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactory.java
index 0ef64d7..61781dd 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactory.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactory.java
@@ -20,33 +20,39 @@ package org.apache.shardingsphere.elasticjob.lite.api.strategy;
 import com.google.common.base.Strings;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.elasticjob.lite.api.strategy.impl.AverageAllocationJobShardingStrategy;
 import org.apache.shardingsphere.elasticjob.lite.exception.JobConfigurationException;
 
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.ServiceLoader;
+
 /**
  * Job sharding strategy factory.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class JobShardingStrategyFactory {
     
+    private static final Map<String, JobShardingStrategy> JOB_SHARDING_STRATEGIES = new LinkedHashMap<>();
+    
+    static {
+        for (JobShardingStrategy each : ServiceLoader.load(JobShardingStrategy.class)) {
+            JOB_SHARDING_STRATEGIES.put(each.getType(), each);
+        }
+    }
+    
     /**
-     * Get strategy.
+     * Get job sharding strategy.
      * 
-     * @param jobShardingStrategyClassName job sharding strategy class name
+     * @param type job sharding strategy type
      * @return Job sharding strategy
      */
-    public static JobShardingStrategy getStrategy(final String jobShardingStrategyClassName) {
-        if (Strings.isNullOrEmpty(jobShardingStrategyClassName)) {
-            return new AverageAllocationJobShardingStrategy();
+    public static JobShardingStrategy getStrategy(final String type) {
+        if (Strings.isNullOrEmpty(type)) {
+            return JOB_SHARDING_STRATEGIES.values().iterator().next();
         }
-        try {
-            Class<?> jobShardingStrategyClass = Class.forName(jobShardingStrategyClassName);
-            if (!JobShardingStrategy.class.isAssignableFrom(jobShardingStrategyClass)) {
-                throw new JobConfigurationException("Class '%s' is not job strategy class", jobShardingStrategyClassName);
-            }
-            return (JobShardingStrategy) jobShardingStrategyClass.newInstance();
-        } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
-            throw new JobConfigurationException("Sharding strategy class '%s' config error, message details are '%s'", jobShardingStrategyClassName, ex.getMessage());
+        if (!JOB_SHARDING_STRATEGIES.containsKey(type)) {
+            throw new JobConfigurationException("Can not find sharding strategy type '%s'.", type);
         }
+        return JOB_SHARDING_STRATEGIES.get(type);
     }
 }
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/AverageAllocationJobShardingStrategy.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/AverageAllocationJobShardingStrategy.java
index 1cb93b1..aa2e3a7 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/AverageAllocationJobShardingStrategy.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/AverageAllocationJobShardingStrategy.java
@@ -77,4 +77,9 @@ public final class AverageAllocationJobShardingStrategy implements JobShardingSt
             count++;
         }
     }
+    
+    @Override
+    public String getType() {
+        return "AVG_ALLOCATION";
+    }
 }
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/OdevitySortByNameJobShardingStrategy.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/OdevitySortByNameJobShardingStrategy.java
index 85bfcda..f4e24a2 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/OdevitySortByNameJobShardingStrategy.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/OdevitySortByNameJobShardingStrategy.java
@@ -39,7 +39,7 @@ import java.util.Map;
  */
 public final class OdevitySortByNameJobShardingStrategy implements JobShardingStrategy {
     
-    private AverageAllocationJobShardingStrategy averageAllocationJobShardingStrategy = new AverageAllocationJobShardingStrategy();
+    private final AverageAllocationJobShardingStrategy averageAllocationJobShardingStrategy = new AverageAllocationJobShardingStrategy();
     
     @Override
     public Map<JobInstance, List<Integer>> sharding(final List<JobInstance> jobInstances, final String jobName, final int shardingTotalCount) {
@@ -49,4 +49,9 @@ public final class OdevitySortByNameJobShardingStrategy implements JobShardingSt
         }
         return averageAllocationJobShardingStrategy.sharding(jobInstances, jobName, shardingTotalCount);
     }
+    
+    @Override
+    public String getType() {
+        return "ODEVITY";
+    }
 }
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategy.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RoundRobinByNameJobShardingStrategy.java
similarity index 84%
rename from elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategy.java
rename to elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RoundRobinByNameJobShardingStrategy.java
index f9d179b..1fc61ab 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategy.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RoundRobinByNameJobShardingStrategy.java
@@ -25,11 +25,11 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * Sharding strategy which for rotate server by name job.
+ * Sharding strategy which for round robin by name job.
  */
-public final class RotateServerByNameJobShardingStrategy implements JobShardingStrategy {
+public final class RoundRobinByNameJobShardingStrategy implements JobShardingStrategy {
     
-    private AverageAllocationJobShardingStrategy averageAllocationJobShardingStrategy = new AverageAllocationJobShardingStrategy();
+    private final AverageAllocationJobShardingStrategy averageAllocationJobShardingStrategy = new AverageAllocationJobShardingStrategy();
     
     @Override
     public Map<JobInstance, List<Integer>> sharding(final List<JobInstance> jobInstances, final String jobName, final int shardingTotalCount) {
@@ -49,4 +49,9 @@ public final class RotateServerByNameJobShardingStrategy implements JobShardingS
         }
         return result;
     }
+    
+    @Override
+    public String getType() {
+        return "ROUND_ROBIN";
+    }
 }
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfiguration.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfiguration.java
index af8dbd9..b07059e 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfiguration.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfiguration.java
@@ -37,7 +37,7 @@ public final class LiteJobConfiguration implements JobRootConfiguration {
     
     private final int monitorPort;
     
-    private final String jobShardingStrategyClass;
+    private final String jobShardingStrategyType;
     
     private final int reconcileIntervalMinutes;
     
@@ -84,7 +84,7 @@ public final class LiteJobConfiguration implements JobRootConfiguration {
         
         private int monitorPort = -1;
         
-        private String jobShardingStrategyClass = "";
+        private String jobShardingStrategyType = "";
         
         private boolean disabled;
         
@@ -141,19 +141,19 @@ public final class LiteJobConfiguration implements JobRootConfiguration {
         }
         
         /**
-         * Set job sharding strategy class.
+         * Set job sharding strategy type.
          *
          * <p>
          * Default for {@code org.apache.shardingsphere.elasticjob.lite.api.strategy.impl.AverageAllocationJobShardingStrategy}.
          * </p>
          *
-         * @param jobShardingStrategyClass job sharding strategy class
+         * @param jobShardingStrategyType job sharding strategy type
          *
          * @return ElasticJob lite configuration builder
          */
-        public Builder jobShardingStrategyClass(final String jobShardingStrategyClass) {
-            if (null != jobShardingStrategyClass) {
-                this.jobShardingStrategyClass = jobShardingStrategyClass;
+        public Builder jobShardingStrategyType(final String jobShardingStrategyType) {
+            if (null != jobShardingStrategyType) {
+                this.jobShardingStrategyType = jobShardingStrategyType;
             }
             return this;
         }
@@ -212,7 +212,7 @@ public final class LiteJobConfiguration implements JobRootConfiguration {
          * @return ElasticJob lite configuration
          */
         public final LiteJobConfiguration build() {
-            return new LiteJobConfiguration(jobConfig, monitorExecution, maxTimeDiffSeconds, monitorPort, jobShardingStrategyClass, reconcileIntervalMinutes, disabled, overwrite);
+            return new LiteJobConfiguration(jobConfig, monitorExecution, maxTimeDiffSeconds, monitorPort, jobShardingStrategyType, reconcileIntervalMinutes, disabled, overwrite);
         }
     }
 }
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationConstants.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationConstants.java
index 3a3a19d..e4bbf8e 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationConstants.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationConstants.java
@@ -28,7 +28,7 @@ public final class LiteJobConfigurationConstants {
     
     public static final String MONITOR_PORT = "monitorPort";
     
-    public static final String JOB_SHARDING_STRATEGY_CLASS = "jobShardingStrategyClass";
+    public static final String JOB_SHARDING_STRATEGY_TYPE = "jobShardingStrategyType";
     
     public static final String RECONCILE_INTERVAL_MINUTES = "reconcileIntervalMinutes";
     
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactory.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactory.java
index 3db110b..2d44228 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactory.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactory.java
@@ -86,7 +86,7 @@ public final class LiteJobConfigurationGsonFactory {
                 case LiteJobConfigurationConstants.MONITOR_PORT:
                     customizedValueMap.put(jsonName, in.nextInt());
                     break;
-                case LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_CLASS:
+                case LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_TYPE:
                     customizedValueMap.put(jsonName, in.nextString());
                     break;
                 case LiteJobConfigurationConstants.RECONCILE_INTERVAL_MINUTES:
@@ -116,8 +116,8 @@ public final class LiteJobConfigurationGsonFactory {
             if (customizedValueMap.containsKey(LiteJobConfigurationConstants.MONITOR_PORT)) {
                 builder.monitorPort((int) customizedValueMap.get(LiteJobConfigurationConstants.MONITOR_PORT));
             }
-            if (customizedValueMap.containsKey(LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_CLASS)) {
-                builder.jobShardingStrategyClass((String) customizedValueMap.get(LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_CLASS));
+            if (customizedValueMap.containsKey(LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_TYPE)) {
+                builder.jobShardingStrategyType((String) customizedValueMap.get(LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_TYPE));
             }
             if (customizedValueMap.containsKey(LiteJobConfigurationConstants.RECONCILE_INTERVAL_MINUTES)) {
                 builder.reconcileIntervalMinutes((int) customizedValueMap.get(LiteJobConfigurationConstants.RECONCILE_INTERVAL_MINUTES));
@@ -136,7 +136,7 @@ public final class LiteJobConfigurationGsonFactory {
             out.name(LiteJobConfigurationConstants.MONITOR_EXECUTION).value(value.isMonitorExecution());
             out.name(LiteJobConfigurationConstants.MAX_TIME_DIFF_SECONDS).value(value.getMaxTimeDiffSeconds());
             out.name(LiteJobConfigurationConstants.MONITOR_PORT).value(value.getMonitorPort());
-            out.name(LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_CLASS).value(value.getJobShardingStrategyClass());
+            out.name(LiteJobConfigurationConstants.JOB_SHARDING_STRATEGY_TYPE).value(value.getJobShardingStrategyType());
             out.name(LiteJobConfigurationConstants.RECONCILE_INTERVAL_MINUTES).value(value.getReconcileIntervalMinutes());
             out.name(LiteJobConfigurationConstants.DISABLED).value(value.isDisabled());
             out.name(LiteJobConfigurationConstants.OVERWRITE).value(value.isOverwrite());
diff --git a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingService.java b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingService.java
index 196830c..ede6bbc 100644
--- a/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingService.java
+++ b/elastic-job-lite-core/src/main/java/org/apache/shardingsphere/elasticjob/lite/internal/sharding/ShardingService.java
@@ -113,7 +113,7 @@ public final class ShardingService {
         log.debug("Job '{}' sharding begin.", jobName);
         jobNodeStorage.fillEphemeralJobNode(ShardingNode.PROCESSING, "");
         resetShardingInfo(shardingTotalCount);
-        JobShardingStrategy jobShardingStrategy = JobShardingStrategyFactory.getStrategy(liteJobConfig.getJobShardingStrategyClass());
+        JobShardingStrategy jobShardingStrategy = JobShardingStrategyFactory.getStrategy(liteJobConfig.getJobShardingStrategyType());
         jobNodeStorage.executeInTransaction(new PersistShardingInfoTransactionExecutionCallback(jobShardingStrategy.sharding(availableJobInstances, jobName, shardingTotalCount)));
         log.debug("Job '{}' sharding complete.", jobName);
     }
diff --git a/elastic-job-lite-core/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.lite.api.strategy.JobShardingStrategy b/elastic-job-lite-core/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.lite.api.strategy.JobShardingStrategy
new file mode 100644
index 0000000..0a45864
--- /dev/null
+++ b/elastic-job-lite-core/src/main/resources/META-INF/services/org.apache.shardingsphere.elasticjob.lite.api.strategy.JobShardingStrategy
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.elasticjob.lite.api.strategy.impl.AverageAllocationJobShardingStrategy
+org.apache.shardingsphere.elasticjob.lite.api.strategy.impl.OdevitySortByNameJobShardingStrategy
+org.apache.shardingsphere.elasticjob.lite.api.strategy.impl.RoundRobinByNameJobShardingStrategy
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactoryTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactoryTest.java
index 1f86a08..f2038f8 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactoryTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/JobShardingStrategyFactoryTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.elasticjob.lite.api.strategy;
 
-import org.apache.shardingsphere.elasticjob.lite.api.strategy.fixture.InvalidJobShardingStrategy;
 import org.apache.shardingsphere.elasticjob.lite.api.strategy.impl.AverageAllocationJobShardingStrategy;
 import org.apache.shardingsphere.elasticjob.lite.exception.JobConfigurationException;
 import org.junit.Test;
@@ -33,22 +32,12 @@ public class JobShardingStrategyFactoryTest {
     }
     
     @Test(expected = JobConfigurationException.class)
-    public void assertGetStrategyFailureWhenClassNotFound() {
-        JobShardingStrategyFactory.getStrategy("NotClass");
-    }
-    
-    @Test(expected = JobConfigurationException.class)
-    public void assertGetStrategyFailureWhenNotStrategyClass() {
-        JobShardingStrategyFactory.getStrategy(Object.class.getName());
-    }
-    
-    @Test(expected = JobConfigurationException.class)
-    public void assertGetStrategyFailureWhenStrategyClassInvalid() {
-        JobShardingStrategyFactory.getStrategy(InvalidJobShardingStrategy.class.getName());
+    public void assertGetStrategyFailureWhenTypeNotFound() {
+        JobShardingStrategyFactory.getStrategy("INVALID");
     }
     
     @Test
     public void assertGetStrategySuccess() {
-        assertThat(JobShardingStrategyFactory.getStrategy(AverageAllocationJobShardingStrategy.class.getName()), instanceOf(AverageAllocationJobShardingStrategy.class));
+        assertThat(JobShardingStrategyFactory.getStrategy("AVG_ALLOCATION"), instanceOf(AverageAllocationJobShardingStrategy.class));
     }
 }
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/fixture/InvalidJobShardingStrategy.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/fixture/InvalidJobShardingStrategy.java
deleted file mode 100644
index 4fd7273..0000000
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/fixture/InvalidJobShardingStrategy.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.api.strategy.fixture;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.elasticjob.lite.api.strategy.JobInstance;
-import org.apache.shardingsphere.elasticjob.lite.api.strategy.JobShardingStrategy;
-
-import java.util.List;
-import java.util.Map;
-
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class InvalidJobShardingStrategy implements JobShardingStrategy {
-    
-    @Override
-    public Map<JobInstance, List<Integer>> sharding(final List<JobInstance> jobInstances, final String jobName, final int shardingTotalCount) {
-        return null;
-    }
-}
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategyTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategyTest.java
index c3152eb..abf8d5f 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategyTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/api/strategy/impl/RotateServerByNameJobShardingStrategyTest.java
@@ -31,7 +31,7 @@ import static org.junit.Assert.assertThat;
 
 public final class RotateServerByNameJobShardingStrategyTest {
     
-    private RotateServerByNameJobShardingStrategy rotateServerByNameJobShardingStrategy = new RotateServerByNameJobShardingStrategy();
+    private RoundRobinByNameJobShardingStrategy rotateServerByNameJobShardingStrategy = new RoundRobinByNameJobShardingStrategy();
     
     @Test
     public void assertSharding1() {
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfigurationTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfigurationTest.java
index febb62b..85c007d 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfigurationTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/config/LiteJobConfigurationTest.java
@@ -31,11 +31,11 @@ public final class LiteJobConfigurationTest {
     public void assertBuildAllProperties() {
         LiteJobConfiguration actual = LiteJobConfiguration.newBuilder(
                 new SimpleJobConfiguration(JobCoreConfiguration.newBuilder("test_job", "0/1 * * * * ?", 3).build()))
-                .monitorExecution(false).maxTimeDiffSeconds(1000).monitorPort(8888).jobShardingStrategyClass("testClass").disabled(true).overwrite(true).reconcileIntervalMinutes(60).build();
+                .monitorExecution(false).maxTimeDiffSeconds(1000).monitorPort(8888).jobShardingStrategyType("AVG_ALLOCATION").disabled(true).overwrite(true).reconcileIntervalMinutes(60).build();
         assertFalse(actual.isMonitorExecution());
         assertThat(actual.getMaxTimeDiffSeconds(), is(1000));
         assertThat(actual.getMonitorPort(), is(8888));
-        assertThat(actual.getJobShardingStrategyClass(), is("testClass"));
+        assertThat(actual.getJobShardingStrategyType(), is("AVG_ALLOCATION"));
         assertTrue(actual.isDisabled());
         assertTrue(actual.isOverwrite());
         assertThat(actual.getReconcileIntervalMinutes(), is(60));
@@ -47,7 +47,7 @@ public final class LiteJobConfigurationTest {
         assertTrue(actual.isMonitorExecution());
         assertThat(actual.getMaxTimeDiffSeconds(), is(-1));
         assertThat(actual.getMonitorPort(), is(-1));
-        assertThat(actual.getJobShardingStrategyClass(), is(""));
+        assertThat(actual.getJobShardingStrategyType(), is(""));
         assertFalse(actual.isDisabled());
         assertFalse(actual.isOverwrite());
     }
@@ -55,7 +55,7 @@ public final class LiteJobConfigurationTest {
     @Test
     public void assertBuildWhenOptionalParametersIsNull() {
         assertThat(LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(
-                "test_job", "0/1 * * * * ?", 3).build())).jobShardingStrategyClass(null).build().getJobShardingStrategyClass(), is(""));
+                "test_job", "0/1 * * * * ?", 3).build())).jobShardingStrategyType(null).build().getJobShardingStrategyType(), is(""));
     }
     
     @Test
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/fixture/LiteJsonConstants.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/fixture/LiteJsonConstants.java
index 70a1a2c..0a03724 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/fixture/LiteJsonConstants.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/fixture/LiteJsonConstants.java
@@ -31,7 +31,7 @@ public final class LiteJsonConstants {
     private static final String JOB_JSON = "{\"jobName\":\"test_job\",\"jobType\":\"SIMPLE\",\"cron\":\"0/1 * * * * ?\","
             + "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"param\",\"failover\":%s,\"misfire\":false,\"description\":\"desc\","
             + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":%s,\"maxTimeDiffSeconds\":%s,"
-            + "\"monitorPort\":8888,\"jobShardingStrategyClass\":\"testClass\",\"disabled\":true,\"overwrite\":true, \"reconcileIntervalMinutes\": 15}";
+            + "\"monitorPort\":8888,\"jobShardingStrategyType\":\"testClass\",\"disabled\":true,\"overwrite\":true, \"reconcileIntervalMinutes\": 15}";
     
     private static final boolean DEFAULT_FAILOVER = true;
     
diff --git a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactoryTest.java b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactoryTest.java
index 0c9030b..f7e5389 100644
--- a/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactoryTest.java
+++ b/elastic-job-lite-core/src/test/java/org/apache/shardingsphere/elasticjob/lite/internal/config/LiteJobConfigurationGsonFactoryTest.java
@@ -42,23 +42,23 @@ public final class LiteJobConfigurationGsonFactoryTest {
     private String simpleJobJson = "{\"jobName\":\"test_job\",\"jobType\":\"SIMPLE\",\"cron\":\"0/1 * * * * ?\","
             + "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":true,\"misfire\":false,\"description\":\"\","
             + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":false,\"maxTimeDiffSeconds\":1000,\"monitorPort\":8888,"
-            + "\"jobShardingStrategyClass\":\"testClass\",\"reconcileIntervalMinutes\":15,\"disabled\":true,\"overwrite\":true}";
+            + "\"jobShardingStrategyType\":\"AVG_ALLOCATION\",\"reconcileIntervalMinutes\":15,\"disabled\":true,\"overwrite\":true}";
     
     private String dataflowJobJson = "{\"jobName\":\"test_job\","
             + "\"jobType\":\"DATAFLOW\",\"cron\":\"0/1 * * * * ?\","
             + "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":false,\"misfire\":true,\"description\":\"\","
             + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"streamingProcess\":true,"
-            + "\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":-1,\"jobShardingStrategyClass\":\"\",\"reconcileIntervalMinutes\":10,\"disabled\":false,\"overwrite\":false}";
+            + "\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":-1,\"jobShardingStrategyType\":\"\",\"reconcileIntervalMinutes\":10,\"disabled\":false,\"overwrite\":false}";
     
     private String scriptJobJson = "{\"jobName\":\"test_job\",\"jobType\":\"SCRIPT\",\"cron\":\"0/1 * * * * ?\","
             + "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"\",\"failover\":false,\"misfire\":true,\"description\":\"\","
             + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"scriptCommandLine\":\"test.sh\",\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":-1,"
-            + "\"jobShardingStrategyClass\":\"\",\"reconcileIntervalMinutes\":10,\"disabled\":false,\"overwrite\":false}";
+            + "\"jobShardingStrategyType\":\"\",\"reconcileIntervalMinutes\":10,\"disabled\":false,\"overwrite\":false}";
     
     @Test
     public void assertToJsonForSimpleJob() {
         LiteJobConfiguration actual = LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder("test_job", "0/1 * * * * ?", 3).failover(true).misfire(false).build()))
-                .monitorExecution(false).maxTimeDiffSeconds(1000).monitorPort(8888).jobShardingStrategyClass("testClass").disabled(true).overwrite(true).reconcileIntervalMinutes(15).build();
+                .monitorExecution(false).maxTimeDiffSeconds(1000).monitorPort(8888).jobShardingStrategyType("AVG_ALLOCATION").disabled(true).overwrite(true).reconcileIntervalMinutes(15).build();
         assertThat(LiteJobConfigurationGsonFactory.toJson(actual), is(simpleJobJson));
     }
     
@@ -91,7 +91,7 @@ public final class LiteJobConfigurationGsonFactoryTest {
         assertFalse(actual.isMonitorExecution());
         assertThat(actual.getMaxTimeDiffSeconds(), is(1000));
         assertThat(actual.getMonitorPort(), is(8888));
-        assertThat(actual.getJobShardingStrategyClass(), is("testClass"));
+        assertThat(actual.getJobShardingStrategyType(), is("AVG_ALLOCATION"));
         assertThat(actual.getReconcileIntervalMinutes(), is(15));
         assertTrue(actual.isDisabled());
         assertTrue(actual.isOverwrite());
@@ -115,7 +115,7 @@ public final class LiteJobConfigurationGsonFactoryTest {
         assertTrue(actual.isMonitorExecution());
         assertThat(actual.getMaxTimeDiffSeconds(), is(-1));
         assertThat(actual.getMonitorPort(), is(-1));
-        assertThat(actual.getJobShardingStrategyClass(), is(""));
+        assertThat(actual.getJobShardingStrategyType(), is(""));
         assertThat(actual.getReconcileIntervalMinutes(), is(10));
         assertFalse(actual.isDisabled());
         assertFalse(actual.isOverwrite());
@@ -139,7 +139,7 @@ public final class LiteJobConfigurationGsonFactoryTest {
         assertTrue(actual.isMonitorExecution());
         assertThat(actual.getMaxTimeDiffSeconds(), is(-1));
         assertThat(actual.getMonitorPort(), is(-1));
-        assertThat(actual.getJobShardingStrategyClass(), is(""));
+        assertThat(actual.getJobShardingStrategyType(), is(""));
         assertThat(actual.getReconcileIntervalMinutes(), is(10));
         assertFalse(actual.isDisabled());
         assertFalse(actual.isOverwrite());
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
index 8f38c67..bc525b0 100644
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/domain/JobSettings.java
@@ -58,7 +58,7 @@ public final class JobSettings implements Serializable {
     
     private boolean misfire;
     
-    private String jobShardingStrategyClass;
+    private String jobShardingStrategyType;
     
     private String description;
     
diff --git a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
index 67b1521..189a5f7 100644
--- a/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
+++ b/elastic-job-lite-lifecycle/src/main/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImpl.java
@@ -67,7 +67,7 @@ public final class JobSettingsAPIImpl implements JobSettingsAPI {
         result.setMonitorPort(liteJobConfig.getMonitorPort());
         result.setFailover(liteJobConfig.getTypeConfig().getCoreConfig().isFailover());
         result.setMisfire(liteJobConfig.getTypeConfig().getCoreConfig().isMisfire());
-        result.setJobShardingStrategyClass(liteJobConfig.getJobShardingStrategyClass());
+        result.setJobShardingStrategyType(liteJobConfig.getJobShardingStrategyType());
         result.setDescription(liteJobConfig.getTypeConfig().getCoreConfig().getDescription());
         result.setReconcileIntervalMinutes(liteJobConfig.getReconcileIntervalMinutes());
         result.getJobProperties().put(JobPropertiesEnum.EXECUTOR_SERVICE_HANDLER.getKey(),
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/fixture/LifecycleJsonConstants.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/fixture/LifecycleJsonConstants.java
index 4b74bf9..faac74d 100644
--- a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/fixture/LifecycleJsonConstants.java
+++ b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/fixture/LifecycleJsonConstants.java
@@ -31,18 +31,18 @@ public final class LifecycleJsonConstants {
     private static final String SIMPLE_JOB_JSON = "{\"jobName\":\"%s\","
             + "\"jobType\":\"SIMPLE\",\"cron\":\"0/1 * * * * ?\","
             + "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"param\",\"failover\":true,\"misfire\":false,\"description\":\"%s\","
-            + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":false,\"maxTimeDiffSeconds\":1000,\"monitorPort\":8888,\"jobShardingStrategyClass\":\"testClass\","
+            + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":false,\"maxTimeDiffSeconds\":1000,\"monitorPort\":8888,\"jobShardingStrategyType\":\"testClass\","
             + "\"disabled\":true,\"overwrite\":true}";
     
     private static final String DATAFLOW_JOB_JSON = "{\"jobName\":\"test_job\",\"jobType\":\"DATAFLOW\","
             + "\"cron\":\"0/1 * * * * ?\",\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"param\",\"failover\":false,\"misfire\":true,\"description\":\"\","
-            + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":8888,\"jobShardingStrategyClass\":\"\",\"disabled\":false,"
+            + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":8888,\"jobShardingStrategyType\":\"\",\"disabled\":false,"
             + "\"overwrite\":false,\"streamingProcess\":true}";
     
     private static final String SCRIPT_JOB_JSON = "{\"jobName\":\"%s\","
             + "\"jobType\":\"SCRIPT\",\"cron\":\"0/1 * * * * ?\","
             + "\"shardingTotalCount\":3,\"shardingItemParameters\":\"\",\"jobParameter\":\"param\",\"failover\":false,\"misfire\":true,\"description\":\"\","
-            + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":8888,\"jobShardingStrategyClass\":\"\","
+            + "\"jobProperties\":" + JOB_PROPS_JSON + ",\"monitorExecution\":true,\"maxTimeDiffSeconds\":-1,\"monitorPort\":8888,\"jobShardingStrategyType\":\"\","
             + "\"disabled\":false,\"overwrite\":false,\"scriptCommandLine\":\"test.sh\"}";
     
     /**
diff --git a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
index e21d18b..74469dc 100644
--- a/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
+++ b/elastic-job-lite-lifecycle/src/test/java/org/apache/shardingsphere/elasticjob/lite/lifecycle/internal/settings/JobSettingsAPIImplTest.java
@@ -77,7 +77,7 @@ public class JobSettingsAPIImplTest {
         assertThat(jobSettings.getMonitorPort(), is(8888));
         assertFalse(jobSettings.isFailover());
         assertTrue(jobSettings.isMisfire());
-        assertThat(jobSettings.getJobShardingStrategyClass(), is(""));
+        assertThat(jobSettings.getJobShardingStrategyType(), is(""));
         assertThat(jobSettings.getReconcileIntervalMinutes(), is(10));
         jobSettings.getJobProperties().put(JobPropertiesEnum.EXECUTOR_SERVICE_HANDLER.getKey(), DefaultExecutorServiceHandler.class.getCanonicalName());
         jobSettings.getJobProperties().put(JobPropertiesEnum.JOB_EXCEPTION_HANDLER.getKey(), DefaultJobExceptionHandler.class.getCanonicalName());
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/AbstractJobBeanDefinitionParser.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/AbstractJobBeanDefinitionParser.java
index 5c56383..b5e86cc 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/AbstractJobBeanDefinitionParser.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/AbstractJobBeanDefinitionParser.java
@@ -70,7 +70,7 @@ public abstract class AbstractJobBeanDefinitionParser extends AbstractBeanDefini
         result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.MONITOR_EXECUTION_ATTRIBUTE));
         result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.MAX_TIME_DIFF_SECONDS_ATTRIBUTE));
         result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.MONITOR_PORT_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.JOB_SHARDING_STRATEGY_CLASS_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.JOB_SHARDING_STRATEGY_TYPE_ATTRIBUTE));
         result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.RECONCILE_INTERVAL_MINUTES));
         result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.DISABLED_ATTRIBUTE));
         result.addConstructorArgValue(element.getAttribute(BaseJobBeanDefinitionParserTag.OVERWRITE_ATTRIBUTE));
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/BaseJobBeanDefinitionParserTag.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/BaseJobBeanDefinitionParserTag.java
index ed6ed45..8285fc9 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/BaseJobBeanDefinitionParserTag.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/common/BaseJobBeanDefinitionParserTag.java
@@ -50,7 +50,7 @@ public final class BaseJobBeanDefinitionParserTag {
     
     public static final String MISFIRE_ATTRIBUTE = "misfire";
     
-    public static final String JOB_SHARDING_STRATEGY_CLASS_ATTRIBUTE = "job-sharding-strategy-class";
+    public static final String JOB_SHARDING_STRATEGY_TYPE_ATTRIBUTE = "job-sharding-strategy-type";
     
     public static final String DESCRIPTION_ATTRIBUTE = "description";
     
diff --git a/elastic-job-lite-spring/src/main/resources/META-INF/namespace/job.xsd b/elastic-job-lite-spring/src/main/resources/META-INF/namespace/job.xsd
index bcc0e97..46c9e97 100644
--- a/elastic-job-lite-spring/src/main/resources/META-INF/namespace/job.xsd
+++ b/elastic-job-lite-spring/src/main/resources/META-INF/namespace/job.xsd
@@ -55,7 +55,7 @@
                 <xsd:attribute name="failover" type="xsd:string" default="false"/>
                 <xsd:attribute name="reconcile-interval-minutes" type="xsd:string" default="10"/>
                 <xsd:attribute name="misfire" type="xsd:string" default="true"/>
-                <xsd:attribute name="job-sharding-strategy-class" type="xsd:string" />
+                <xsd:attribute name="job-sharding-strategy-type" type="xsd:string" />
                 <xsd:attribute name="description" type="xsd:string" />
                 <xsd:attribute name="disabled" type="xsd:string" default="false"/>
                 <xsd:attribute name="overwrite" type="xsd:string" default="false"/>