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/10/19 10:28:44 UTC

[shardingsphere-elasticjob] branch master updated: Add error handler spring namespace (#1596)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new ef41f73  Add error handler spring namespace (#1596)
ef41f73 is described below

commit ef41f73e225a7d07671c12f7260750e1ad4c1888
Author: Liang Zhang <te...@163.com>
AuthorDate: Mon Oct 19 18:28:37 2020 +0800

    Add error handler spring namespace (#1596)
    
    * Rename rdb-event-trace to rdb-tracing for spring namespace
    
    * Add error handler spring namespace
---
 .../configuration/spring-namespace.cn.md           |  2 +-
 .../configuration/spring-namespace.en.md           |  2 +-
 .../usage/event-trace/spring-namespace.cn.md       |  2 +-
 .../usage/event-trace/spring-namespace.en.md       |  2 +-
 .../elasticjob-lite-spring-namespace/pom.xml       | 19 ++++++++
 .../namespace/ElasticJobNamespaceHandler.java      | 10 ++++-
 .../DingtalkErrorHandlerBeanDefinitionParser.java} | 19 ++++----
 .../EmailErrorHandlerBeanDefinitionParser.java}    | 25 +++++++----
 .../WechatErrorHandlerBeanDefinitionParser.java}   | 17 ++++----
 .../tag/DingtalkErrorHandlerBeanDefinitionTag.java | 38 ++++++++++++++++
 .../tag/EmailErrorHandlerBeanDefinitionTag.java    | 50 +++++++++++++++++++++
 .../tag/WechatErrorHandlerBeanDefinitionTag.java   | 34 +++++++++++++++
 .../parser/TracingBeanDefinitionParser.java        |  2 +-
 .../resources/META-INF/namespace/elasticjob.xsd    | 51 +++++++++++++++++++++-
 .../src/test/resources/META-INF/job/base.xml       |  2 +-
 .../META-INF/job/oneOffWithEventTraceRdb.xml       |  2 +-
 .../main/resources/META-INF/applicationContext.xml |  2 +-
 17 files changed, 243 insertions(+), 36 deletions(-)

diff --git a/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.cn.md b/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.cn.md
index 952d9a1..bb117f0 100644
--- a/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.cn.md
+++ b/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.cn.md
@@ -67,7 +67,7 @@ chapter = true
 
 ## 事件追踪配置
 
-\<elasticjob:rdb-event-trace />
+\<elasticjob:rdb-tracing />
 
 可配置属性:
 
diff --git a/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.en.md b/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.en.md
index c97a297..3b92310 100644
--- a/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.en.md
+++ b/docs/content/user-manual/elasticjob-lite/configuration/spring-namespace.en.md
@@ -66,7 +66,7 @@ Configuration:
 
 ## Event Tracing Configuration
 
-\<elasticjob:rdb-event-trace />
+\<elasticjob:rdb-tracing />
 
 Configuration:
 
diff --git a/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.cn.md b/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.cn.md
index 67c1dd9..7333bfa 100644
--- a/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.cn.md
+++ b/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.cn.md
@@ -42,7 +42,7 @@ chapter = true
         <property name="password" value="${password}" />
     </bean>
     <!-- 配置事件追踪 -->
-    <elasticjob:rdb-event-trace id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
+    <elasticjob:rdb-tracing id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
     
     <!-- 配置作业 -->
     <elasticjob:job id="${myJob.id}" job-ref="myJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace" sharding-total-count="3" cron="0/1 * * * * ?" />
diff --git a/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.en.md b/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.en.md
index 989d86c..543ec25 100644
--- a/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.en.md
+++ b/docs/content/user-manual/elasticjob-lite/usage/event-trace/spring-namespace.en.md
@@ -40,7 +40,7 @@ chapter = true
         <property name="password" value="${password}" />
     </bean>
     <!-- Configure event tracing -->
-    <elasticjob:rdb-event-trace id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
+    <elasticjob:rdb-tracing id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
     
     <!-- Configure job -->
     <elasticjob:job id="${myJob.id}" job-ref="myJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace" sharding-total-count="3" cron="0/1 * * * * ?" />
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/pom.xml b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/pom.xml
index 79346e1..90ddd97 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/pom.xml
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/pom.xml
@@ -48,6 +48,25 @@
         </dependency>
         
         <dependency>
+            <groupId>org.apache.shardingsphere.elasticjob</groupId>
+            <artifactId>elasticjob-error-handler-email</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere.elasticjob</groupId>
+            <artifactId>elasticjob-error-handler-wechat</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere.elasticjob</groupId>
+            <artifactId>elasticjob-error-handler-dingtalk</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        
+        <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/ElasticJobNamespaceHandler.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/ElasticJobNamespaceHandler.java
index 6e92a99..663bd72 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/ElasticJobNamespaceHandler.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/ElasticJobNamespaceHandler.java
@@ -17,9 +17,12 @@
 
 package org.apache.shardingsphere.elasticjob.lite.spring.namespace;
 
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.parser.DingtalkErrorHandlerBeanDefinitionParser;
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.parser.EmailErrorHandlerBeanDefinitionParser;
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.parser.WechatErrorHandlerBeanDefinitionParser;
 import org.apache.shardingsphere.elasticjob.lite.spring.namespace.job.parser.JobBeanDefinitionParser;
-import org.apache.shardingsphere.elasticjob.lite.spring.namespace.snapshot.parser.SnapshotBeanDefinitionParser;
 import org.apache.shardingsphere.elasticjob.lite.spring.namespace.reg.parser.ZookeeperBeanDefinitionParser;
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.snapshot.parser.SnapshotBeanDefinitionParser;
 import org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.parser.TracingBeanDefinitionParser;
 import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
 
@@ -33,6 +36,9 @@ public final class ElasticJobNamespaceHandler extends NamespaceHandlerSupport {
         registerBeanDefinitionParser("job", new JobBeanDefinitionParser());
         registerBeanDefinitionParser("zookeeper", new ZookeeperBeanDefinitionParser());
         registerBeanDefinitionParser("snapshot", new SnapshotBeanDefinitionParser());
-        registerBeanDefinitionParser("rdb-event-trace", new TracingBeanDefinitionParser());
+        registerBeanDefinitionParser("rdb-tracing", new TracingBeanDefinitionParser());
+        registerBeanDefinitionParser("email-error-handler", new EmailErrorHandlerBeanDefinitionParser());
+        registerBeanDefinitionParser("wechat-error-handler", new WechatErrorHandlerBeanDefinitionParser());
+        registerBeanDefinitionParser("dingtalk-error-handler", new DingtalkErrorHandlerBeanDefinitionParser());
     }
 }
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/DingtalkErrorHandlerBeanDefinitionParser.java
similarity index 61%
copy from elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
copy to elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/DingtalkErrorHandlerBeanDefinitionParser.java
index 4db3718..38ef33f 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/DingtalkErrorHandlerBeanDefinitionParser.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.parser;
 
-import org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.tag.TracingBeanDefinitionTag;
-import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
+import org.apache.shardingsphere.elasticjob.error.handler.dingtalk.DingtalkConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.tag.DingtalkErrorHandlerBeanDefinitionTag;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
@@ -26,15 +26,18 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Job bean definition parser.
+ * Dingtalk error handler bean definition parser.
  */
-public final class TracingBeanDefinitionParser extends AbstractBeanDefinitionParser {
+public final class DingtalkErrorHandlerBeanDefinitionParser extends AbstractBeanDefinitionParser {
     
     @Override
     protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
-        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(TracingConfiguration.class);
-        factory.addConstructorArgValue("RDB");
-        factory.addConstructorArgReference(element.getAttribute(TracingBeanDefinitionTag.DATA_SOURCE_REF_ATTRIBUTE));
+        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(DingtalkConfiguration.class);
+        factory.addConstructorArgValue(element.getAttribute(DingtalkErrorHandlerBeanDefinitionTag.WEBHOOK));
+        factory.addConstructorArgValue(element.getAttribute(DingtalkErrorHandlerBeanDefinitionTag.KEYWORD));
+        factory.addConstructorArgValue(element.getAttribute(DingtalkErrorHandlerBeanDefinitionTag.SECRET));
+        factory.addConstructorArgValue(element.getAttribute(DingtalkErrorHandlerBeanDefinitionTag.CONNECT_TIMEOUT_MILLISECOND));
+        factory.addConstructorArgValue(element.getAttribute(DingtalkErrorHandlerBeanDefinitionTag.READ_TIMEOUT_MILLISECOND));
         return factory.getBeanDefinition();
     }
 }
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/EmailErrorHandlerBeanDefinitionParser.java
similarity index 50%
copy from elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
copy to elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/EmailErrorHandlerBeanDefinitionParser.java
index 4db3718..7f22e67 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/EmailErrorHandlerBeanDefinitionParser.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.parser;
 
-import org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.tag.TracingBeanDefinitionTag;
-import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
+import org.apache.shardingsphere.elasticjob.error.handler.email.EmailConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.tag.EmailErrorHandlerBeanDefinitionTag;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
@@ -26,15 +26,24 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Job bean definition parser.
+ * Email error handler bean definition parser.
  */
-public final class TracingBeanDefinitionParser extends AbstractBeanDefinitionParser {
+public final class EmailErrorHandlerBeanDefinitionParser extends AbstractBeanDefinitionParser {
     
     @Override
     protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
-        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(TracingConfiguration.class);
-        factory.addConstructorArgValue("RDB");
-        factory.addConstructorArgReference(element.getAttribute(TracingBeanDefinitionTag.DATA_SOURCE_REF_ATTRIBUTE));
+        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(EmailConfiguration.class);
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.HOST));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.PORT));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.USERNAME));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.PASSWORD));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.USE_SSL));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.SUBJECT));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.FROM));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.TO));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.CC));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.BCC));
+        factory.addConstructorArgValue(element.getAttribute(EmailErrorHandlerBeanDefinitionTag.DEBUG));
         return factory.getBeanDefinition();
     }
 }
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/WechatErrorHandlerBeanDefinitionParser.java
similarity index 68%
copy from elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
copy to elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/WechatErrorHandlerBeanDefinitionParser.java
index 4db3718..d1ccedb 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/parser/WechatErrorHandlerBeanDefinitionParser.java
@@ -15,10 +15,10 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.parser;
+package org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.parser;
 
-import org.apache.shardingsphere.elasticjob.lite.spring.namespace.tracing.tag.TracingBeanDefinitionTag;
-import org.apache.shardingsphere.elasticjob.tracing.api.TracingConfiguration;
+import org.apache.shardingsphere.elasticjob.error.handler.wechat.WechatConfiguration;
+import org.apache.shardingsphere.elasticjob.lite.spring.namespace.error.tag.WechatErrorHandlerBeanDefinitionTag;
 import org.springframework.beans.factory.support.AbstractBeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
@@ -26,15 +26,16 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Job bean definition parser.
+ * Wechat error handler bean definition parser.
  */
-public final class TracingBeanDefinitionParser extends AbstractBeanDefinitionParser {
+public final class WechatErrorHandlerBeanDefinitionParser extends AbstractBeanDefinitionParser {
     
     @Override
     protected AbstractBeanDefinition parseInternal(final Element element, final ParserContext parserContext) {
-        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(TracingConfiguration.class);
-        factory.addConstructorArgValue("RDB");
-        factory.addConstructorArgReference(element.getAttribute(TracingBeanDefinitionTag.DATA_SOURCE_REF_ATTRIBUTE));
+        BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(WechatConfiguration.class);
+        factory.addConstructorArgValue(element.getAttribute(WechatErrorHandlerBeanDefinitionTag.WEBHOOK));
+        factory.addConstructorArgValue(element.getAttribute(WechatErrorHandlerBeanDefinitionTag.CONNECT_TIMEOUT_MILLISECOND));
+        factory.addConstructorArgValue(element.getAttribute(WechatErrorHandlerBeanDefinitionTag.READ_TIMEOUT_MILLISECOND));
         return factory.getBeanDefinition();
     }
 }
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/DingtalkErrorHandlerBeanDefinitionTag.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/DingtalkErrorHandlerBeanDefinitionTag.java
new file mode 100644
index 0000000..3535e58
--- /dev/null
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/DingtalkErrorHandlerBeanDefinitionTag.java
@@ -0,0 +1,38 @@
+/*
+ * 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.spring.namespace.error.tag;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Dingtalk error handler bean definition tag.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DingtalkErrorHandlerBeanDefinitionTag {
+    
+    public static final String WEBHOOK = "webhook";
+    
+    public static final String KEYWORD = "keyword";
+    
+    public static final String SECRET = "secret";
+    
+    public static final String CONNECT_TIMEOUT_MILLISECOND = "connect-timeout-millisecond";
+    
+    public static final String READ_TIMEOUT_MILLISECOND = "read-timeout-millisecond";
+}
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/EmailErrorHandlerBeanDefinitionTag.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/EmailErrorHandlerBeanDefinitionTag.java
new file mode 100644
index 0000000..7f7b90a
--- /dev/null
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/EmailErrorHandlerBeanDefinitionTag.java
@@ -0,0 +1,50 @@
+/*
+ * 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.spring.namespace.error.tag;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Email error handler bean definition tag.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class EmailErrorHandlerBeanDefinitionTag {
+    
+    public static final String HOST = "host";
+    
+    public static final String PORT = "port";
+    
+    public static final String USERNAME = "username";
+    
+    public static final String PASSWORD = "password";
+    
+    public static final String USE_SSL = "use-ssl";
+    
+    public static final String SUBJECT = "subject";
+    
+    public static final String FROM = "from";
+    
+    public static final String TO = "to";
+    
+    public static final String CC = "cc";
+    
+    public static final String BCC = "bcc";
+    
+    public static final String DEBUG = "debug";
+}
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/WechatErrorHandlerBeanDefinitionTag.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/WechatErrorHandlerBeanDefinitionTag.java
new file mode 100644
index 0000000..6a555b9
--- /dev/null
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/error/tag/WechatErrorHandlerBeanDefinitionTag.java
@@ -0,0 +1,34 @@
+/*
+ * 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.spring.namespace.error.tag;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+/**
+ * Wechat error handler bean definition tag.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class WechatErrorHandlerBeanDefinitionTag {
+    
+    public static final String WEBHOOK = "webhook";
+    
+    public static final String CONNECT_TIMEOUT_MILLISECOND = "connect-timeout-millisecond";
+    
+    public static final String READ_TIMEOUT_MILLISECOND = "read-timeout-millisecond";
+}
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
index 4db3718..86e8349 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/tracing/parser/TracingBeanDefinitionParser.java
@@ -26,7 +26,7 @@ import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
 
 /**
- * Job bean definition parser.
+ * Tracing bean definition parser.
  */
 public final class TracingBeanDefinitionParser extends AbstractBeanDefinitionParser {
     
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/resources/META-INF/namespace/elasticjob.xsd b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/resources/META-INF/namespace/elasticjob.xsd
index e40c07c..2f56716 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/resources/META-INF/namespace/elasticjob.xsd
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/resources/META-INF/namespace/elasticjob.xsd
@@ -33,7 +33,6 @@
                     <xsd:attribute name="job-ref" type="xsd:string" />
                     <xsd:attribute name="job-type" type="xsd:string" />
                     <xsd:attribute name="registry-center-ref" type="xsd:string" use="required" />
-                    <xsd:attribute name="tracing-ref" type="xsd:string" />
                     <xsd:attribute name="sharding-total-count" type="xsd:string" use="required" />
                     <xsd:attribute name="cron" type="xsd:string" />
                     <xsd:attribute name="sharding-item-parameters" type="xsd:string" />
@@ -47,6 +46,8 @@
                     <xsd:attribute name="job-executor-service-handler-type" type="xsd:string" />
                     <xsd:attribute name="job-error-handler-type" type="xsd:string" />
                     <xsd:attribute name="job-listener-types" type="xsd:string" />
+                    <xsd:attribute name="tracing-ref" type="xsd:string" />
+                    <xsd:attribute name="error-handler-config-ref" 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" />
@@ -72,7 +73,7 @@
         </xsd:complexType>
     </xsd:element>
     
-    <xsd:element name="rdb-event-trace">
+    <xsd:element name="rdb-tracing">
         <xsd:complexType>
             <xsd:complexContent>
                 <xsd:extension base="beans:identifiedType">
@@ -82,6 +83,52 @@
         </xsd:complexType>
     </xsd:element>
     
+    <xsd:element name="email-error-handler">
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="beans:identifiedType">
+                    <xsd:attribute name="host" type="xsd:string" use="required" />
+                    <xsd:attribute name="port" type="xsd:string" use="required" />
+                    <xsd:attribute name="username" type="xsd:string" use="required" />
+                    <xsd:attribute name="password" type="xsd:string" use="required" />
+                    <xsd:attribute name="use-ssl" type="xsd:string" default="true" />
+                    <xsd:attribute name="subject" type="xsd:string" use="required" />
+                    <xsd:attribute name="from" type="xsd:string" use="required" />
+                    <xsd:attribute name="to" type="xsd:string" use="required" />
+                    <xsd:attribute name="cc" type="xsd:string" use="required" />
+                    <xsd:attribute name="bcc" type="xsd:string" use="required" />
+                    <xsd:attribute name="debug" type="xsd:string" default="false" />
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    
+    <xsd:element name="wechat-error-handler">
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="beans:identifiedType">
+                    <xsd:attribute name="webhook" type="xsd:string" use="required" />
+                    <xsd:attribute name="connect-timeout-millisecond" type="xsd:string" default="3000" />
+                    <xsd:attribute name="read-timeout-millisecond" type="xsd:string" default="5000" />
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    
+    <xsd:element name="dingtalk-error-handler">
+        <xsd:complexType>
+            <xsd:complexContent>
+                <xsd:extension base="beans:identifiedType">
+                    <xsd:attribute name="webhook" type="xsd:string" use="required" />
+                    <xsd:attribute name="keyword" type="xsd:string" use="required" />
+                    <xsd:attribute name="secret" type="xsd:string" use="required" />
+                    <xsd:attribute name="connect-timeout-millisecond" type="xsd:string" default="3000" />
+                    <xsd:attribute name="read-timeout-millisecond" type="xsd:string" default="5000" />
+                </xsd:extension>
+            </xsd:complexContent>
+        </xsd:complexType>
+    </xsd:element>
+    
     <xsd:element name="snapshot">
         <xsd:complexType>
             <xsd:complexContent>
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/base.xml b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/base.xml
index 31b2004..eb09a3d 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/base.xml
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/base.xml
@@ -38,7 +38,7 @@
         <property name="username" value="sa" />
         <property name="password" value="" />
     </bean>
-    <elasticjob:rdb-event-trace id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
+    <elasticjob:rdb-tracing id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
     
     <bean id="foo" class="org.apache.shardingsphere.elasticjob.lite.spring.namespace.fixture.service.FooServiceImpl" />
 </beans>
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/oneOffWithEventTraceRdb.xml b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/oneOffWithEventTraceRdb.xml
index ee5bc33..8d96143 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/oneOffWithEventTraceRdb.xml
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/test/resources/META-INF/job/oneOffWithEventTraceRdb.xml
@@ -24,7 +24,7 @@
                            http://shardingsphere.apache.org/schema/elasticjob
                            http://shardingsphere.apache.org/schema/elasticjob/elasticjob.xsd
                            ">
-    <import resource="base.xml"/>
+    <import resource="base.xml" />
     
     <bean id="fooJob" class="org.apache.shardingsphere.elasticjob.lite.spring.namespace.fixture.job.FooSimpleElasticJob" />
     <bean id="dataflowJob" class="org.apache.shardingsphere.elasticjob.lite.spring.namespace.fixture.job.DataflowElasticJob" />
diff --git a/examples/elasticjob-example-lite-spring/src/main/resources/META-INF/applicationContext.xml b/examples/elasticjob-example-lite-spring/src/main/resources/META-INF/applicationContext.xml
index a765879..32393ae 100644
--- a/examples/elasticjob-example-lite-spring/src/main/resources/META-INF/applicationContext.xml
+++ b/examples/elasticjob-example-lite-spring/src/main/resources/META-INF/applicationContext.xml
@@ -40,7 +40,7 @@
         <property name="username" value="${event.rdb.username}" />
         <property name="password" value="${event.rdb.password}" />
     </bean>
-    <elasticjob:rdb-event-trace id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
+    <elasticjob:rdb-tracing id="elasticJobTrace" data-source-ref="elasticJobTracingDataSource" />
     
     <bean id="simpleJob" class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.SpringSimpleJob" />
     <bean id="dataflowJob" class="org.apache.shardingsphere.elasticjob.lite.example.job.dataflow.SpringDataflowJob" />