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

[shardingsphere-elasticjob-lite] branch master updated: Refactor BeanDefinitionTag (#963)

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 53452ec   Refactor BeanDefinitionTag (#963)
53452ec is described below

commit 53452ec37a37c8dd0cfada2ffa5711b0f8fbe1d3
Author: Liang Zhang <te...@163.com>
AuthorDate: Mon Jul 6 14:24:58 2020 +0800

     Refactor BeanDefinitionTag (#963)
    
    * Reactor JobBeanDefinitionTag
    
    * Refactor MonitorBeanDefinitionTag
    
    * Add ZookeeperBeanDefinitionTag
---
 docs/content/02-guide/config-manual.md             | 47 +++++++++---------
 .../console/html/status/job/job_config.html        |  8 ++--
 .../resources/console/i18n/message_en.properties   |  8 ++--
 .../resources/console/i18n/message_zh.properties   |  8 ++--
 .../resources/console/js/status/job/job_config.js  |  8 ++--
 .../console/js/status/job/jobs_status_overview.js  |  4 +-
 .../spring/job/parser/JobBeanDefinitionParser.java | 55 ++++++++++++----------
 .../tag/EventTraceBeanDefinitionTag.java}          | 12 ++---
 .../JobBeanDefinitionTag.java}                     | 32 ++++---------
 .../tag/JobListenerBeanDefinitionTag.java}         | 18 ++++---
 .../monitor/handler/MonitorNamespaceHandler.java   |  4 +-
 ...arser.java => MonitorBeanDefinitionParser.java} | 11 +++--
 .../MonitorBeanDefinitionTag.java}                 |  8 ++--
 .../reg/parser/ZookeeperBeanDefinitionParser.java  | 17 +++----
 .../tag/ZookeeperBeanDefinitionTag.java}           | 24 +++++++---
 .../src/main/resources/META-INF/namespace/job.xsd  |  4 +-
 .../resources/META-INF/job/withEventTraceRdb.xml   |  4 +-
 .../test/resources/META-INF/job/withJobHandler.xml |  4 +-
 .../src/test/resources/META-INF/job/withJobRef.xml |  2 +-
 19 files changed, 142 insertions(+), 136 deletions(-)

diff --git a/docs/content/02-guide/config-manual.md b/docs/content/02-guide/config-manual.md
index b61d92d..039e014 100644
--- a/docs/content/02-guide/config-manual.md
+++ b/docs/content/02-guide/config-manual.md
@@ -113,31 +113,28 @@ 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-type   | String  | 否      |                 | 作业分片策略实现类全路径<br />默认使用平均分配策略<br />详情参见:[作业分片策略](/02-guide/job-sharding-strategy)|
-| description                  | String  | 否      |                 | 作业描述信息                                                                 |
-| disabled                     | boolean | 否      | false           | 作业是否禁止启动<br />可用于部署作业时,先禁止启动,部署结束后统一启动              |
-| overwrite                    | boolean | 否      | false           | 本地配置是否可覆盖注册中心配置<br />如果可覆盖,每次启动作业都以本地配置为准         |
-| job-error-handler            | String  | 否      |                 | 扩展异常处理类                                                               |
-| job-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-parameter                     | String  | 否      |                 | 作业自定义参数<br />作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业<br />例:每次获取的数据量、作业实例从数据库读取的主键等 |
+| monitor-execution                 | boolean | 否      | true            | 监控作业运行时状态<br />每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。<br />每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。|
+| failover                          | boolean | 否      | false           | 是否开启失效转移                                                              |
+| misfire                           | boolean | 否      | true            | 是否开启错过任务重新执行                                                       |
+| max-time-diff-seconds             | int     | 否      | -1              | 最大允许的本机与注册中心的时间误差秒数<br />如果时间误差超过配置秒数则作业启动时将抛异常<br />配置为-1表示不校验时间误差|
+| reconcile-interval-minutes        | int     | 否      | 10              | 修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复<br />单位:分钟 |
+| job-sharding-strategy-type        | String  | 否      |                 | 作业分片策略实现类全路径<br />默认使用平均分配策略<br />详情参见:[作业分片策略](/02-guide/job-sharding-strategy)|
+| job-executor-service-handler-type | String  | 否      |                 | 扩展作业处理线程池类                                                          |
+| job-error-handler-type            | String  | 否      |                 | 扩展异常处理类                                                               |
+| description                       | String  | 否      |                 | 作业描述信息                                                                 |
+| disabled                          | boolean | 否      | false           | 作业是否禁止启动<br />可用于部署作业时,先禁止启动,部署结束后统一启动              |
+| overwrite                         | boolean | 否      | false           | 本地配置是否可覆盖注册中心配置<br />如果可覆盖,每次启动作业都以本地配置为准         |
+| event-trace-rdb-data-source       | String  | 否      |                 | 作业事件追踪的数据源Bean引用                                                   |
 
 ### c. 监控配置
 
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 2ee1e3b..97632a4 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
@@ -123,15 +123,15 @@
                     </div>
                 </div>
                 <div class="form-group">
-                    <label for="job-error-handler" class="col-sm-2 control-label" data-lang="job-error-handler"></label>
+                    <label for="job-executor-service-handler-type" class="col-sm-2 control-label" data-lang="job-executor-service-handler-type"></label>
                     <div class="col-sm-9">
-                        <input type="text" id="job-error-handler" name="jobErrorHandler" class="form-control" data-toggle="tooltip" data-placement="bottom" title="扩展`JobErrorHandler`接口,定制异常处理流程,默认实现是记录日志但不抛出异常。" />
+                        <input type="text" id="job-executor-service-handler-type" name="jobExecutorServiceHandlerType" class="form-control" data-toggle="tooltip" data-placement="bottom" title="扩展`ExecutorServiceHandler`接口,定制线程池。" />
                     </div>
                 </div>
                 <div class="form-group">
-                    <label for="job-executor-service-handler" class="col-sm-2 control-label" data-lang="job-executor-service-handler"></label>
+                    <label for="job-error-handler-type" class="col-sm-2 control-label" data-lang="job-error-handler-type"></label>
                     <div class="col-sm-9">
-                        <input type="text" id="job-executor-service-handler" name="jobExecutorServiceHandler" class="form-control" data-toggle="tooltip" data-placement="bottom" title="扩展`ExecutorServiceHandler`接口,定制线程池。" />
+                        <input type="text" id="job-error-handler-type" name="jobErrorHandlerType" class="form-control" data-toggle="tooltip" data-placement="bottom" title="扩展`JobErrorHandler`接口,定制异常处理流程,默认实现是记录日志但不抛出异常。" />
                     </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 3ee7f05..f1437e3 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-class=Job class
 job-parameter=Job parameter
 job-sharding-strategy-type=Job sharding strategy type
-job-error-handler=Job error handler
+job-error-handler-type=Job error handler
 job-cron=Crontab
 job-sharding-total-count=Sharding total count
 job-max-time-diff-seconds=Max time diff seconds
@@ -96,7 +96,7 @@ job-failover=Failover
 job-misfire=Misfire
 job-streaming-process=Streaming process
 job-sharding-item-parameters=Sharding item parameters
-job-executor-service-handler=Executor service handler
+job-executor-service-handler-type=Executor service handler
 job-description=Description
 job-script-command-line=Script command line
 job-sharding-item=Sharding item
@@ -120,8 +120,8 @@ placeholder-misfire=Whether the task is open misses the re-execution
 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-type=By default, you can customize the share-chip strategy based on IP address sequentially
-placeholder-job-error-handler=Extension 'JobErrorHandler' interface, custom exception handling process, the default implementation is log but not throw an exception.
-placeholder-job-executor-service-handler=Extension 'JobExecutorServiceHandler' interface, custom thread pool.
+placeholder-job-executor-service-handler-type=Extension 'JobExecutorServiceHandler' interface, custom thread pool.
+placeholder-job-error-handler-type=Extension 'JobErrorHandler' interface, custom exception handling process, the default implementation is log but not throw an exception.
 placeholder-script-command-line=The full path name of the execution script can contain parameters
 
 server-detail=Server detail
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 22f85d4..bfaddec 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-class=作业实现类
 job-parameter=自定义参数
 job-sharding-strategy-type=作业分片策略类型
-job-error-handler=定制异常处理类全路径
+job-error-handler-type=定制异常处理类全路径
 job-cron=Cron表达式
 job-sharding-total-count=作业分片总数
 job-max-time-diff-seconds=最大容忍本机与注册中心的时间误差秒数
@@ -96,7 +96,7 @@ job-failover=支持自动失效转移
 job-misfire=支持错过重执行
 job-streaming-process=是否流式处理数据
 job-sharding-item-parameters=分片序列号/参数对照表
-job-executor-service-handler=定制线程池全路径
+job-executor-service-handler-type=定制线程池全路径
 job-description=作业描述信息
 job-script-command-line=脚本作业全路径
 job-sharding-item=分片项
@@ -120,8 +120,8 @@ placeholder-misfire=是否开启任务错过重新执行
 placeholder-streaming-process=如果流式处理数据, 则fetchData不返回空结果将持续执行作业; 如果非流式处理数据, 则处理数据完成后作业结束
 placeholder-sharding-item-parameters=分片序列号和参数用等号分隔,多个键值对用逗号分隔,类似map。分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c
 placeholder-job-sharding-strategy-type=默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略
-placeholder-job-error-handler=扩展 `JobErrorHandler` 接口,定制异常处理流程,默认实现是记录日志但不抛出异常。
-placeholder-job-executor-service-handler=扩展 `JobExecutorServiceHandler` 接口,定制线程池。
+placeholder-job-executor-service-handler-type=扩展 `JobExecutorServiceHandler` 接口,定制线程池
+placeholder-job-error-handler-type=扩展 `JobErrorHandler` 接口,定制异常处理流程,默认实现是记录日志但不抛出异常
 placeholder-script-command-line=执行脚本的全路径名称,可以包含参数
 
 server-detail=服务器详情
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 2401915..328e43b 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,8 +64,8 @@ function bindSubmitJobConfigurationForm() {
             var shardingItemParameters = $("#sharding-item-parameters").val();
             var jobShardingStrategyType = $("#job-sharding-strategy-type").val();
             var scriptCommandLine = $("#script-command-line").val();
-            var jobExecutorServiceHandler = $("#job-executor-service-handler").val();
-            var jobErrorHandler = $("#job-error-handler").val();
+            var jobExecutorServiceHandlerType = $("#job-executor-service-handler-type").val();
+            var jobErrorHandlerType = $("#job-error-handler-type").val();
             var description = $("#description").val();
             var reconcileIntervalMinutes = $("#reconcile-interval-minutes").val();
             var postJson = {
@@ -80,8 +80,8 @@ function bindSubmitJobConfigurationForm() {
                 misfire: misfire,
                 reconcileIntervalMinutes: reconcileIntervalMinutes,
                 jobShardingStrategyType: jobShardingStrategyType,
-                jobExecutorServiceHandler: jobExecutorServiceHandler,
-                jobErrorHandler: jobErrorHandler,
+                jobExecutorServiceHandlerType: jobExecutorServiceHandlerType,
+                jobErrorHandlerType: jobErrorHandlerType,
                 description: description,
                 props: {'streaming.process': streamingProcess, 'script.command.line': scriptCommandLine}
             };
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 6b838ff..708520d 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
@@ -231,8 +231,8 @@ function renderJob(data) {
     $("#misfire").attr("checked", data.misfire);
     $("#max-time-diff-seconds").attr("value", data.maxTimeDiffSeconds);
     $("#job-sharding-strategy-type").attr("value", data.jobShardingStrategyType);
-    $("#job-executor-service-handler").attr("value", data.jobExecutorServiceHandlerType);
-    $("#job-error-handler").attr("value", data.jobErrorHandlerType);
+    $("#job-executor-service-handler-type").attr("value", data.jobExecutorServiceHandlerType);
+    $("#job-error-handler-type").attr("value", data.jobErrorHandlerType);
     $("#reconcile-interval-minutes").attr("value", data.reconcileIntervalMinutes);
     $("#description").text(data.description);
     $("#streaming-process").attr("checked", data.props['streaming.process'] === 'true');
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParser.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParser.java
index c3dadb7..b919ded 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParser.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParser.java
@@ -22,6 +22,9 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.OneOffJobBootstrap;
 import org.apache.shardingsphere.elasticjob.lite.api.bootstrap.impl.ScheduleJobBootstrap;
 import org.apache.shardingsphere.elasticjob.lite.api.job.JobConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.spring.job.tag.EventTraceBeanDefinitionTag;
+import org.apache.shardingsphere.elasticjob.lite.spring.job.tag.JobBeanDefinitionTag;
+import org.apache.shardingsphere.elasticjob.lite.spring.job.tag.JobListenerBeanDefinitionTag;
 import org.apache.shardingsphere.elasticjob.lite.tracing.api.TracingConfiguration;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
@@ -44,14 +47,14 @@ public final class JobBeanDefinitionParser extends AbstractBeanDefinitionParser
     @Override
     protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
         BeanDefinitionBuilder factory;
-        if (Strings.isNullOrEmpty(element.getAttribute(JobBeanDefinitionParserTag.CRON_ATTRIBUTE))) {
+        if (Strings.isNullOrEmpty(element.getAttribute(JobBeanDefinitionTag.CRON_ATTRIBUTE))) {
             factory = BeanDefinitionBuilder.rootBeanDefinition(OneOffJobBootstrap.class);
         } else {
             factory = BeanDefinitionBuilder.rootBeanDefinition(ScheduleJobBootstrap.class);
             factory.setInitMethodName("schedule");
         }
-        factory.addConstructorArgReference(element.getAttribute(JobBeanDefinitionParserTag.REGISTRY_CENTER_REF_ATTRIBUTE));
-        factory.addConstructorArgReference(element.getAttribute(JobBeanDefinitionParserTag.JOB_REF_ATTRIBUTE));
+        factory.addConstructorArgReference(element.getAttribute(JobBeanDefinitionTag.REGISTRY_CENTER_REF_ATTRIBUTE));
+        factory.addConstructorArgReference(element.getAttribute(JobBeanDefinitionTag.JOB_REF_ATTRIBUTE));
         factory.addConstructorArgValue(createJobConfigurationBeanDefinition(element, parserContext));
         BeanDefinition tracingConfig = createTracingConfiguration(element);
         if (null != tracingConfig) {
@@ -64,32 +67,32 @@ public final class JobBeanDefinitionParser extends AbstractBeanDefinitionParser
     private BeanDefinition createJobConfigurationBeanDefinition(final Element element, final ParserContext parserContext) {
         BeanDefinitionBuilder result = BeanDefinitionBuilder.rootBeanDefinition(JobConfiguration.class);
         result.addConstructorArgValue(element.getAttribute(ID_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.CRON_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.SHARDING_TOTAL_COUNT_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.SHARDING_ITEM_PARAMETERS_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.JOB_PARAMETER_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.MONITOR_EXECUTION_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.FAILOVER_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.MISFIRE_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.MAX_TIME_DIFF_SECONDS_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.RECONCILE_INTERVAL_MINUTES));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.JOB_SHARDING_STRATEGY_TYPE_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.JOB_EXECUTOR_SERVICE_HANDLER_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.JOB_ERROR_HANDLER_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.DESCRIPTION_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.CRON_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.SHARDING_TOTAL_COUNT_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.SHARDING_ITEM_PARAMETERS_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.JOB_PARAMETER_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.MONITOR_EXECUTION_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.FAILOVER_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.MISFIRE_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.MAX_TIME_DIFF_SECONDS_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.RECONCILE_INTERVAL_MINUTES));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.JOB_SHARDING_STRATEGY_TYPE_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.JOB_EXECUTOR_SERVICE_HANDLER_TYPE_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.JOB_ERROR_HANDLER_TYPE_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.DESCRIPTION_ATTRIBUTE));
         result.addConstructorArgValue(parsePropsElement(element, parserContext));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.DISABLED_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionParserTag.OVERWRITE_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.DISABLED_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.OVERWRITE_ATTRIBUTE));
         return result.getBeanDefinition();
     }
     
     private Properties parsePropsElement(final Element element, final ParserContext parserContext) {
-        Element propsElement = DomUtils.getChildElementByTagName(element, JobBeanDefinitionParserTag.PROPS_TAG);
+        Element propsElement = DomUtils.getChildElementByTagName(element, JobBeanDefinitionTag.PROPS_TAG);
         return null == propsElement ? new Properties() : parserContext.getDelegate().parsePropsElement(propsElement);
     }
     
     private BeanDefinition createTracingConfiguration(final Element element) {
-        String eventTraceDataSourceName = element.getAttribute(JobBeanDefinitionParserTag.EVENT_TRACE_RDB_DATA_SOURCE_ATTRIBUTE);
+        String eventTraceDataSourceName = element.getAttribute(EventTraceBeanDefinitionTag.EVENT_TRACE_RDB_DATA_SOURCE_ATTRIBUTE);
         if (Strings.isNullOrEmpty(eventTraceDataSourceName)) {
             return null;
         }
@@ -100,19 +103,19 @@ public final class JobBeanDefinitionParser extends AbstractBeanDefinitionParser
     }
     
     private List<BeanDefinition> createJobListeners(final Element element) {
-        Element listenerElement = DomUtils.getChildElementByTagName(element, JobBeanDefinitionParserTag.LISTENER_TAG);
-        Element distributedListenerElement = DomUtils.getChildElementByTagName(element, JobBeanDefinitionParserTag.DISTRIBUTED_LISTENER_TAG);
+        Element listenerElement = DomUtils.getChildElementByTagName(element, JobListenerBeanDefinitionTag.LISTENER_TAG);
+        Element distributedListenerElement = DomUtils.getChildElementByTagName(element, JobListenerBeanDefinitionTag.DISTRIBUTED_LISTENER_TAG);
         List<BeanDefinition> result = new ManagedList<>(2);
         if (null != listenerElement) {
-            BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(listenerElement.getAttribute(JobBeanDefinitionParserTag.CLASS_ATTRIBUTE));
+            BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(listenerElement.getAttribute(JobListenerBeanDefinitionTag.CLASS_ATTRIBUTE));
             factory.setScope(BeanDefinition.SCOPE_PROTOTYPE);
             result.add(factory.getBeanDefinition());
         }
         if (null != distributedListenerElement) {
-            BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(distributedListenerElement.getAttribute(JobBeanDefinitionParserTag.CLASS_ATTRIBUTE));
+            BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(distributedListenerElement.getAttribute(JobListenerBeanDefinitionTag.CLASS_ATTRIBUTE));
             factory.setScope(BeanDefinition.SCOPE_PROTOTYPE);
-            factory.addConstructorArgValue(distributedListenerElement.getAttribute(JobBeanDefinitionParserTag.DISTRIBUTED_LISTENER_STARTED_TIMEOUT_MILLISECONDS_ATTRIBUTE));
-            factory.addConstructorArgValue(distributedListenerElement.getAttribute(JobBeanDefinitionParserTag.DISTRIBUTED_LISTENER_COMPLETED_TIMEOUT_MILLISECONDS_ATTRIBUTE));
+            factory.addConstructorArgValue(distributedListenerElement.getAttribute(JobListenerBeanDefinitionTag.DISTRIBUTED_LISTENER_STARTED_TIMEOUT_MILLISECONDS_ATTRIBUTE));
+            factory.addConstructorArgValue(distributedListenerElement.getAttribute(JobListenerBeanDefinitionTag.DISTRIBUTED_LISTENER_COMPLETED_TIMEOUT_MILLISECONDS_ATTRIBUTE));
             result.add(factory.getBeanDefinition());
         }
         return result;
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/EventTraceBeanDefinitionTag.java
similarity index 73%
copy from elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
copy to elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/EventTraceBeanDefinitionTag.java
index 785c9ab..c3fbf5d 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/EventTraceBeanDefinitionTag.java
@@ -7,7 +7,7 @@
  * 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.
@@ -15,18 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.job.tag;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Monitor bean definition parser tag.
+ * Event trace bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MonitorBeanDefinitionParserTag {
-    
-    public static final String REGISTRY_CENTER_REF_ATTRIBUTE = "registry-center-ref";
+public final class EventTraceBeanDefinitionTag {
     
-    public static final String MONITOR_PORT_ATTRIBUTE = "monitor-port";
+    public static final String EVENT_TRACE_RDB_DATA_SOURCE_ATTRIBUTE = "event-trace-rdb-data-source";
 }
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParserTag.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/JobBeanDefinitionTag.java
similarity index 70%
rename from elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParserTag.java
rename to elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/JobBeanDefinitionTag.java
index 5b82c30..5b096e7 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/parser/JobBeanDefinitionParserTag.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/JobBeanDefinitionTag.java
@@ -15,18 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.job.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.job.tag;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Job bean definition parser tag.
+ * Job bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class JobBeanDefinitionParserTag {
-    
-    public static final String CLASS_ATTRIBUTE = "class";
+public final class JobBeanDefinitionTag {
     
     public static final String JOB_REF_ATTRIBUTE = "job-ref";
     
@@ -44,33 +42,23 @@ public final class JobBeanDefinitionParserTag {
     
     public static final String FAILOVER_ATTRIBUTE = "failover";
     
-    public static final String MAX_TIME_DIFF_SECONDS_ATTRIBUTE = "max-time-diff-seconds";
-    
     public static final String MISFIRE_ATTRIBUTE = "misfire";
     
+    public static final String MAX_TIME_DIFF_SECONDS_ATTRIBUTE = "max-time-diff-seconds";
+    
     public static final String RECONCILE_INTERVAL_MINUTES = "reconcile-interval-minutes";
     
     public static final String JOB_SHARDING_STRATEGY_TYPE_ATTRIBUTE = "job-sharding-strategy-type";
     
-    public static final String DESCRIPTION_ATTRIBUTE = "description";
+    public static final String JOB_EXECUTOR_SERVICE_HANDLER_TYPE_ATTRIBUTE = "job-executor-service-handler-type";
     
-    public static final String DISABLED_ATTRIBUTE = "disabled";
+    public static final String JOB_ERROR_HANDLER_TYPE_ATTRIBUTE = "job-error-handler-type";
     
-    public static final String OVERWRITE_ATTRIBUTE = "overwrite";
+    public static final String DESCRIPTION_ATTRIBUTE = "description";
     
     public static final String PROPS_TAG = "props";
     
-    public static final String LISTENER_TAG = "listener";
-    
-    public static final String DISTRIBUTED_LISTENER_TAG = "distributed-listener";
-    
-    public static final String DISTRIBUTED_LISTENER_STARTED_TIMEOUT_MILLISECONDS_ATTRIBUTE = "started-timeout-milliseconds";
-    
-    public static final String DISTRIBUTED_LISTENER_COMPLETED_TIMEOUT_MILLISECONDS_ATTRIBUTE = "completed-timeout-milliseconds";
-    
-    public static final String JOB_EXECUTOR_SERVICE_HANDLER_ATTRIBUTE = "job-executor-service-handler";
-    
-    public static final String JOB_ERROR_HANDLER_ATTRIBUTE = "job-error-handler";
+    public static final String DISABLED_ATTRIBUTE = "disabled";
     
-    public static final String EVENT_TRACE_RDB_DATA_SOURCE_ATTRIBUTE = "event-trace-rdb-data-source";
+    public static final String OVERWRITE_ATTRIBUTE = "overwrite";
 }
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/JobListenerBeanDefinitionTag.java
similarity index 59%
copy from elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
copy to elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/JobListenerBeanDefinitionTag.java
index 785c9ab..55d54a3 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/job/tag/JobListenerBeanDefinitionTag.java
@@ -7,7 +7,7 @@
  * 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.
@@ -15,18 +15,24 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.job.tag;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Monitor bean definition parser tag.
+ * Job listener bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MonitorBeanDefinitionParserTag {
+public final class JobListenerBeanDefinitionTag {
+    
+    public static final String LISTENER_TAG = "listener";
+    
+    public static final String DISTRIBUTED_LISTENER_TAG = "distributed-listener";
+    
+    public static final String CLASS_ATTRIBUTE = "class";
     
-    public static final String REGISTRY_CENTER_REF_ATTRIBUTE = "registry-center-ref";
+    public static final String DISTRIBUTED_LISTENER_STARTED_TIMEOUT_MILLISECONDS_ATTRIBUTE = "started-timeout-milliseconds";
     
-    public static final String MONITOR_PORT_ATTRIBUTE = "monitor-port";
+    public static final String DISTRIBUTED_LISTENER_COMPLETED_TIMEOUT_MILLISECONDS_ATTRIBUTE = "completed-timeout-milliseconds";
 }
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/handler/MonitorNamespaceHandler.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/handler/MonitorNamespaceHandler.java
index 6c75e0f..a1d4747 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/handler/MonitorNamespaceHandler.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/handler/MonitorNamespaceHandler.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.elasticjob.lite.spring.monitor.handler;
 
-import org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser.EmbedMonitorBeanDefinitionParser;
+import org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser.MonitorBeanDefinitionParser;
 import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
 
 /**
@@ -27,6 +27,6 @@ public final class MonitorNamespaceHandler extends NamespaceHandlerSupport {
     
     @Override
     public void init() {
-        registerBeanDefinitionParser("embed", new EmbedMonitorBeanDefinitionParser());
+        registerBeanDefinitionParser("embed", new MonitorBeanDefinitionParser());
     }
 }
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/EmbedMonitorBeanDefinitionParser.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParser.java
similarity index 84%
rename from elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/EmbedMonitorBeanDefinitionParser.java
rename to elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParser.java
index 9740e89..8db1ab0 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/EmbedMonitorBeanDefinitionParser.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParser.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser;
 
 import org.apache.shardingsphere.elasticjob.lite.internal.monitor.MonitorService;
+import org.apache.shardingsphere.elasticjob.lite.spring.monitor.tag.MonitorBeanDefinitionTag;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
@@ -25,15 +26,15 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Bean definition parser for embed monitor.
+ * Monitor bean definition parser.
  */
-public class EmbedMonitorBeanDefinitionParser extends AbstractBeanDefinitionParser {
-
+public final class MonitorBeanDefinitionParser extends AbstractBeanDefinitionParser {
+    
     @Override
     protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
         BeanDefinitionBuilder result = BeanDefinitionBuilder.rootBeanDefinition(MonitorService.class);
-        result.addConstructorArgReference(element.getAttribute(MonitorBeanDefinitionParserTag.REGISTRY_CENTER_REF_ATTRIBUTE));
-        result.addConstructorArgValue(element.getAttribute(MonitorBeanDefinitionParserTag.MONITOR_PORT_ATTRIBUTE));
+        result.addConstructorArgReference(element.getAttribute(MonitorBeanDefinitionTag.REGISTRY_CENTER_REF_ATTRIBUTE));
+        result.addConstructorArgValue(element.getAttribute(MonitorBeanDefinitionTag.MONITOR_PORT_ATTRIBUTE));
         result.setInitMethodName("listen");
         result.setDestroyMethodName("close");
         return result.getBeanDefinition();
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/tag/MonitorBeanDefinitionTag.java
similarity index 91%
copy from elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
copy to elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/tag/MonitorBeanDefinitionTag.java
index 785c9ab..fdcfbeb 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/tag/MonitorBeanDefinitionTag.java
@@ -7,7 +7,7 @@
  * 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.
@@ -15,16 +15,16 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.monitor.tag;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Monitor bean definition parser tag.
+ * Monitor bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MonitorBeanDefinitionParserTag {
+public final class MonitorBeanDefinitionTag {
     
     public static final String REGISTRY_CENTER_REF_ATTRIBUTE = "registry-center-ref";
     
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java
index ff7d179..1820c96 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/parser/ZookeeperBeanDefinitionParser.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.elasticjob.lite.spring.reg.parser;
 import com.google.common.base.Strings;
 import org.apache.shardingsphere.elasticjob.lite.reg.zookeeper.ZookeeperConfiguration;
 import org.apache.shardingsphere.elasticjob.lite.reg.zookeeper.ZookeeperRegistryCenter;
+import org.apache.shardingsphere.elasticjob.lite.spring.reg.tag.ZookeeperBeanDefinitionTag;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
@@ -41,14 +42,14 @@ public final class ZookeeperBeanDefinitionParser extends AbstractBeanDefinitionP
     
     private AbstractBeanDefinition buildZookeeperConfigurationBeanDefinition(final Element element) {
         BeanDefinitionBuilder configuration = BeanDefinitionBuilder.rootBeanDefinition(ZookeeperConfiguration.class);
-        configuration.addConstructorArgValue(element.getAttribute("server-lists"));
-        configuration.addConstructorArgValue(element.getAttribute("namespace"));
-        addPropertyValueIfNotEmpty("base-sleep-time-milliseconds", "baseSleepTimeMilliseconds", element, configuration);
-        addPropertyValueIfNotEmpty("max-sleep-time-milliseconds", "maxSleepTimeMilliseconds", element, configuration);
-        addPropertyValueIfNotEmpty("max-retries", "maxRetries", element, configuration);
-        addPropertyValueIfNotEmpty("session-timeout-milliseconds", "sessionTimeoutMilliseconds", element, configuration);
-        addPropertyValueIfNotEmpty("connection-timeout-milliseconds", "connectionTimeoutMilliseconds", element, configuration);
-        addPropertyValueIfNotEmpty("digest", "digest", element, configuration);
+        configuration.addConstructorArgValue(element.getAttribute(ZookeeperBeanDefinitionTag.SERVER_LISTS_ATTRIBUTE));
+        configuration.addConstructorArgValue(element.getAttribute(ZookeeperBeanDefinitionTag.NAMESPACE_ATTRIBUTE));
+        addPropertyValueIfNotEmpty(ZookeeperBeanDefinitionTag.BASE_SLEEP_TIME_MILLISECONDS_ATTRIBUTE, "baseSleepTimeMilliseconds", element, configuration);
+        addPropertyValueIfNotEmpty(ZookeeperBeanDefinitionTag.MAX_SLEEP_TIME_MILLISECONDS_ATTRIBUTE, "maxSleepTimeMilliseconds", element, configuration);
+        addPropertyValueIfNotEmpty(ZookeeperBeanDefinitionTag.MAX_RETRIES_ATTRIBUTE, "maxRetries", element, configuration);
+        addPropertyValueIfNotEmpty(ZookeeperBeanDefinitionTag.SESSION_TIMEOUT_MILLISECONDS_ATTRIBUTE, "sessionTimeoutMilliseconds", element, configuration);
+        addPropertyValueIfNotEmpty(ZookeeperBeanDefinitionTag.CONNECTION_TIMEOUT_MILLISECONDS_ATTRIBUTE, "connectionTimeoutMilliseconds", element, configuration);
+        addPropertyValueIfNotEmpty(ZookeeperBeanDefinitionTag.DIGEST_ATTRIBUTE, "digest", element, configuration);
         return configuration.getBeanDefinition();
     }
     
diff --git a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/tag/ZookeeperBeanDefinitionTag.java
similarity index 51%
rename from elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
rename to elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/tag/ZookeeperBeanDefinitionTag.java
index 785c9ab..7f9e086 100644
--- a/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/monitor/parser/MonitorBeanDefinitionParserTag.java
+++ b/elastic-job-lite-spring/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/reg/tag/ZookeeperBeanDefinitionTag.java
@@ -7,7 +7,7 @@
  * 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.
@@ -15,18 +15,30 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.monitor.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.reg.tag;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 
 /**
- * Monitor bean definition parser tag.
+ * Zookeeper bean definition tag.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MonitorBeanDefinitionParserTag {
+public final class ZookeeperBeanDefinitionTag {
+    
+    public static final String SERVER_LISTS_ATTRIBUTE = "server-lists";
+    
+    public static final String NAMESPACE_ATTRIBUTE = "namespace";
+    
+    public static final String BASE_SLEEP_TIME_MILLISECONDS_ATTRIBUTE = "base-sleep-time-milliseconds";
+    
+    public static final String MAX_SLEEP_TIME_MILLISECONDS_ATTRIBUTE = "max-sleep-time-milliseconds";
+    
+    public static final String MAX_RETRIES_ATTRIBUTE = "max-retries";
+    
+    public static final String SESSION_TIMEOUT_MILLISECONDS_ATTRIBUTE = "session-timeout-milliseconds";
     
-    public static final String REGISTRY_CENTER_REF_ATTRIBUTE = "registry-center-ref";
+    public static final String CONNECTION_TIMEOUT_MILLISECONDS_ATTRIBUTE = "connection-timeout-milliseconds";
     
-    public static final String MONITOR_PORT_ATTRIBUTE = "monitor-port";
+    public static final String DIGEST_ATTRIBUTE = "digest";
 }
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 b5192a5..f85ce75 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
@@ -56,8 +56,8 @@
                 <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-type" type="xsd:string" />
-                <xsd:attribute name="job-executor-service-handler" type="xsd:string" />
-                <xsd:attribute name="job-error-handler" type="xsd:string" />
+                <xsd:attribute name="job-executor-service-handler-type" type="xsd:string" />
+                <xsd:attribute name="job-error-handler-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" />
diff --git a/elastic-job-lite-spring/src/test/resources/META-INF/job/withEventTraceRdb.xml b/elastic-job-lite-spring/src/test/resources/META-INF/job/withEventTraceRdb.xml
index b61cae8..9471904 100644
--- a/elastic-job-lite-spring/src/test/resources/META-INF/job/withEventTraceRdb.xml
+++ b/elastic-job-lite-spring/src/test/resources/META-INF/job/withEventTraceRdb.xml
@@ -31,7 +31,7 @@
     
     <job:job id="simpleElasticJob_namespace_event_trace_rdb" job-ref="fooJob" registry-center-ref="regCenter" 
                 cron="${simpleJob.cron}" sharding-total-count="${simpleJob.shardingTotalCount}" sharding-item-parameters="${simpleJob.shardingItemParameters}" disabled="${simpleJob.disabled}" 
-                overwrite="${simpleJob.overwrite}" job-executor-service-handler="SINGLE_THREAD" event-trace-rdb-data-source="elasticJobLog" />
+                overwrite="${simpleJob.overwrite}" job-executor-service-handler-type="SINGLE_THREAD" event-trace-rdb-data-source="elasticJobLog" />
     <job:job id="dataflowElasticJob_namespace_event_trace_rdb" job-ref="dataflowJob" registry-center-ref="regCenter" 
-                  cron="0/1 * * * * ?" sharding-total-count="3" sharding-item-parameters="0=A,1=B,2=C" job-error-handler="THROW" description="中文描述" overwrite="true" />
+                  cron="0/1 * * * * ?" sharding-total-count="3" sharding-item-parameters="0=A,1=B,2=C" job-error-handler-type="THROW" description="中文描述" overwrite="true" />
 </beans>
diff --git a/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobHandler.xml b/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobHandler.xml
index 31a7365..ce80450 100644
--- a/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobHandler.xml
+++ b/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobHandler.xml
@@ -31,7 +31,7 @@
     
     <job:job id="simpleElasticJob_namespace_job_handler" job-ref="fooJob" 
                 registry-center-ref="regCenter" cron="${simpleJob.cron}" sharding-total-count="${simpleJob.shardingTotalCount}" sharding-item-parameters="${simpleJob.shardingItemParameters}" 
-                disabled="${simpleJob.disabled}" overwrite="${simpleJob.overwrite}" job-executor-service-handler="SINGLE_THREAD" />
+                disabled="${simpleJob.disabled}" overwrite="${simpleJob.overwrite}" job-executor-service-handler-type="SINGLE_THREAD" />
     <job:job id="dataflowElasticJob_namespace_job_handler" job-ref="dataflowJob" registry-center-ref="regCenter" cron="0/1 * * * * ?" sharding-total-count="3" sharding-item-parameters="0=A,1=B,2=C"
-                  job-error-handler="THROW" description="中文描述" overwrite="true" />
+                  job-error-handler-type="THROW" description="中文描述" overwrite="true" />
 </beans>
diff --git a/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobRef.xml b/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobRef.xml
index f1fa972..26d0361 100644
--- a/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobRef.xml
+++ b/elastic-job-lite-spring/src/test/resources/META-INF/job/withJobRef.xml
@@ -33,7 +33,7 @@
     </bean>
     
     <job:job id="simpleElasticJob_job_ref" job-ref="refSimpleJob" registry-center-ref="regCenter" cron="${simpleJob.cron}" sharding-total-count="${simpleJob.shardingTotalCount}" 
-                sharding-item-parameters="${simpleJob.shardingItemParameters}" disabled="${simpleJob.disabled}" overwrite="${simpleJob.overwrite}" job-executor-service-handler="SINGLE_THREAD" />
+                sharding-item-parameters="${simpleJob.shardingItemParameters}" disabled="${simpleJob.disabled}" overwrite="${simpleJob.overwrite}" job-executor-service-handler-type="SINGLE_THREAD" />
     <job:job id="dataflowElasticJob_job_ref" job-ref="refDataflowJob" registry-center-ref="regCenter" cron="${dataflowJob.cron}" sharding-total-count="${dataflowJob.shardingTotalCount}" 
              sharding-item-parameters="${dataflowJob.shardingItemParameters}" overwrite="${dataflowJob.overwrite}">
         <props>