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/20 14:02:17 UTC

[shardingsphere-elasticjob] branch master updated: Fix spring namespace example for job-error-handler (#1617)

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 ad75f84  Fix  spring namespace example for job-error-handler (#1617)
ad75f84 is described below

commit ad75f845683df3b65278406d2139ca8281cdc8dd
Author: Yanjie Zhou <zh...@aliyun.com>
AuthorDate: Tue Oct 20 22:02:06 2020 +0800

    Fix  spring namespace example for job-error-handler (#1617)
    
    * Fix spring example for job-error-handler
    
    * Fix code style
---
 .../job/parser/JobBeanDefinitionParser.java        |  23 ++-
 .../namespace/job/tag/JobBeanDefinitionTag.java    |   2 +
 .../main/resources/META-INF/applicationContext.xml | 189 ++++++++++++---------
 3 files changed, 122 insertions(+), 92 deletions(-)

diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/parser/JobBeanDefinitionParser.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/parser/JobBeanDefinitionParser.java
index b198edb..d1b691a 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/parser/JobBeanDefinitionParser.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/parser/JobBeanDefinitionParser.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.
@@ -82,14 +82,8 @@ public final class JobBeanDefinitionParser extends AbstractBeanDefinitionParser
         } else {
             result.addConstructorArgValue(Arrays.asList(element.getAttribute(JobBeanDefinitionTag.JOB_LISTENER_TYPES_ATTRIBUTE).split(",")));
         }
-        String tracingRef = element.getAttribute(JobBeanDefinitionTag.TRACING_REF_ATTRIBUTE);
-        if (Strings.isNullOrEmpty(tracingRef)) {
-            result.addConstructorArgValue(Collections.emptyList());
-        } else {
-            Collection<BeanDefinition> extraConfigs = new ManagedList<>(1);
-            extraConfigs.add(parserContext.getRegistry().getBeanDefinition(tracingRef));
-            result.addConstructorArgValue(extraConfigs);
-        }
+        result.addConstructorArgValue(parseExtraConfigs(new String[]{JobBeanDefinitionTag.TRACING_REF_ATTRIBUTE, JobBeanDefinitionTag.ERROR_HANDLER_CONFIG_REF_ATTRIBUTE},
+                element, parserContext));
         result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.DESCRIPTION_ATTRIBUTE));
         result.addConstructorArgValue(parsePropsElement(element, parserContext));
         result.addConstructorArgValue(element.getAttribute(JobBeanDefinitionTag.DISABLED_ATTRIBUTE));
@@ -97,6 +91,17 @@ public final class JobBeanDefinitionParser extends AbstractBeanDefinitionParser
         return result.getBeanDefinition();
     }
     
+    private Collection<BeanDefinition> parseExtraConfigs(final String[] extraConfigRefs, final Element element, final ParserContext parserContext) {
+        Collection<BeanDefinition> result = new ManagedList<>(extraConfigRefs.length);
+        for (String each : extraConfigRefs) {
+            String attribute = element.getAttribute(each);
+            if (!Strings.isNullOrEmpty(attribute)) {
+                result.add(parserContext.getRegistry().getBeanDefinition(attribute));
+            }
+        }
+        return result;
+    }
+    
     private Properties parsePropsElement(final Element element, final ParserContext parserContext) {
         Element propsElement = DomUtils.getChildElementByTagName(element, JobBeanDefinitionTag.PROPS_TAG);
         return null == propsElement ? new Properties() : parserContext.getDelegate().parsePropsElement(propsElement);
diff --git a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/tag/JobBeanDefinitionTag.java b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/tag/JobBeanDefinitionTag.java
index 2bd207d..34f2493 100644
--- a/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/tag/JobBeanDefinitionTag.java
+++ b/elasticjob-lite/elasticjob-lite-spring/elasticjob-lite-spring-namespace/src/main/java/org/apache/shardingsphere/elasticjob/lite/spring/namespace/job/tag/JobBeanDefinitionTag.java
@@ -62,6 +62,8 @@ public final class JobBeanDefinitionTag {
 
     public static final String EXTRA_CONFIGURATION_REF_ATTRIBUTE = "extra-configurations-ref";
     
+    public static final String ERROR_HANDLER_CONFIG_REF_ATTRIBUTE = "error-handler-config-ref";
+    
     public static final String DESCRIPTION_ATTRIBUTE = "description";
     
     public static final String PROPS_TAG = "props";
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 970d988..f41ddfa 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
@@ -16,8 +16,8 @@
   ~ limitations under the License.
   -->
 
-<beans xmlns="http://www.springframework.org/schema/beans" 
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:elasticjob="http://shardingsphere.apache.org/schema/elasticjob"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
@@ -27,95 +27,118 @@
                         http://shardingsphere.apache.org/schema/elasticjob
                         http://shardingsphere.apache.org/schema/elasticjob/elasticjob.xsd
                         ">
-    <context:component-scan base-package="org.apache.shardingsphere.elasticjob.lite.example" />
-    <context:property-placeholder location="classpath:conf/*.properties" />
-    
-    <elasticjob:zookeeper id="regCenter" server-lists="${serverLists}" namespace="${namespace}" base-sleep-time-milliseconds="${baseSleepTimeMilliseconds}" max-sleep-time-milliseconds="${maxSleepTimeMilliseconds}" max-retries="${maxRetries}" />
-    
+    <context:component-scan base-package="org.apache.shardingsphere.elasticjob.lite.example"/>
+    <context:property-placeholder location="classpath:conf/*.properties"/>
+
+    <elasticjob:zookeeper id="regCenter" server-lists="${serverLists}" namespace="${namespace}"
+                          base-sleep-time-milliseconds="${baseSleepTimeMilliseconds}"
+                          max-sleep-time-milliseconds="${maxSleepTimeMilliseconds}" max-retries="${maxRetries}"/>
+
     <elasticjob:snapshot id="jobSnapshot" registry-center-ref="regCenter" dump-port="9999"/>
-    
+
     <bean id="elasticJobTracingDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
-        <property name="driverClassName" value="${event.rdb.driver}" />
-        <property name="url" value="${event.rdb.url}" />
-        <property name="username" value="${event.rdb.username}" />
-        <property name="password" value="${event.rdb.password}" />
+        <property name="driverClassName" value="${event.rdb.driver}"/>
+        <property name="url" value="${event.rdb.url}"/>
+        <property name="username" value="${event.rdb.username}"/>
+        <property name="password" value="${event.rdb.password}"/>
     </bean>
-    <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" />
-    
-    <elasticjob:job id="${simple.id}" job-ref="simpleJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace" 
-             sharding-total-count="${simple.shardingTotalCount}" cron="${simple.cron}" sharding-item-parameters="${simple.shardingItemParameters}" monitor-execution="${simple.monitorExecution}" failover="${simple.failover}" description="${simple.description}" 
-             disabled="${simple.disabled}" overwrite="${simple.overwrite}" />
-    
-    <elasticjob:job id="${dataflow.id}" job-ref="dataflowJob" registry-center-ref="regCenter" 
-             sharding-total-count="${dataflow.shardingTotalCount}" cron="${dataflow.cron}" sharding-item-parameters="${dataflow.shardingItemParameters}" monitor-execution="${dataflow.monitorExecution}" failover="${dataflow.failover}" max-time-diff-seconds="${dataflow.maxTimeDiffSeconds}" description="${dataflow.description}" 
-             disabled="${dataflow.disabled}" overwrite="${dataflow.overwrite}">
+
+    <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"/>
+
+    <elasticjob:job id="${simple.id}" job-ref="simpleJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace"
+                    sharding-total-count="${simple.shardingTotalCount}" cron="${simple.cron}"
+                    sharding-item-parameters="${simple.shardingItemParameters}"
+                    monitor-execution="${simple.monitorExecution}" failover="${simple.failover}"
+                    description="${simple.description}"
+                    disabled="${simple.disabled}" overwrite="${simple.overwrite}"/>
+
+    <elasticjob:job id="${dataflow.id}" job-ref="dataflowJob" registry-center-ref="regCenter"
+                    sharding-total-count="${dataflow.shardingTotalCount}" cron="${dataflow.cron}"
+                    sharding-item-parameters="${dataflow.shardingItemParameters}"
+                    monitor-execution="${dataflow.monitorExecution}" failover="${dataflow.failover}"
+                    max-time-diff-seconds="${dataflow.maxTimeDiffSeconds}" description="${dataflow.description}"
+                    disabled="${dataflow.disabled}" overwrite="${dataflow.overwrite}">
         <props>
             <prop key="streaming.process">${dataflow.streamingProcess}</prop>
         </props>
     </elasticjob:job>
-    
+
     <!-- use absolute path to run script job -->
     <!--<elasticjob:job id="${script.id}" registry-center-ref="regCenter" -->
-             <!--sharding-total-count="${script.shardingTotalCount}" cron="${script.cron}" sharding-item-parameters="${script.shardingItemParameters}" description="${script.description}" -->
-             <!--overwrite="${script.overwrite}">-->
-        <!--<props>-->
-            <!--<prop key="script.command.line">${script.scriptCommandLine}</prop>-->
-        <!--</props>-->
+    <!--sharding-total-count="${script.shardingTotalCount}" cron="${script.cron}" sharding-item-parameters="${script.shardingItemParameters}" description="${script.description}" -->
+    <!--overwrite="${script.overwrite}">-->
+    <!--<props>-->
+    <!--<prop key="script.command.line">${script.scriptCommandLine}</prop>-->
+    <!--</props>-->
     <!--</elasticjob:job>-->
-    
-    <bean id="occurErrorNoticeDingtalkJob" class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.JavaOccurErrorJob" />
-    
-    <elasticjob:job id="${occurErrorNoticeDingtalkJob.id}" job-ref="occurErrorNoticeDingtalkJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace"
-                    sharding-total-count="${occurErrorNoticeDingtalkJob.shardingTotalCount}" cron="${occurErrorNoticeDingtalkJob.cron}" sharding-item-parameters="${occurErrorNoticeDingtalkJob.shardingItemParameters}" 
-                    monitor-execution="${occurErrorNoticeDingtalkJob.monitorExecution}" failover="${occurErrorNoticeDingtalkJob.failover}" description="${occurErrorNoticeDingtalkJob.description}"
-                    job-error-handler-type="${occurErrorNoticeDingtalkJob.jobErrorHandlerType}"
-                    disabled="${occurErrorNoticeDingtalkJob.disabled}" overwrite="${occurErrorNoticeDingtalkJob.overwrite}" >
-        <props>
-            <prop key="dingtalk.webhook">https://oapi.dingtalk.com/robot/send?access_token=42eead064e81ce81fc6af2c107fbe10a4339a3d40a7db8abf5b34d8261527a3f</prop>
-            <prop key="dingtalk.keyword">keyword</prop>
-            <prop key="dingtalk.secret">SEC0b0a6b13b6823b95737dd83491c23adee5d8a7a649899a12217e038eddc84ff4</prop>
-            <prop key="dingtalk.connectTimeoutMillisecond">3000</prop>
-            <prop key="dingtalk.readTimeoutMillisecond">5000</prop>
-        </props>
-    </elasticjob:job>
-    
-    <bean id="occurErrorNoticeWechatJob" class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.JavaOccurErrorJob" />
-    
-    <elasticjob:job id="${occurErrorNoticeWechatJob.id}" job-ref="occurErrorNoticeWechatJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace"
-                    sharding-total-count="${occurErrorNoticeWechatJob.shardingTotalCount}" cron="${occurErrorNoticeWechatJob.cron}" sharding-item-parameters="${occurErrorNoticeWechatJob.shardingItemParameters}" 
-                    monitor-execution="${occurErrorNoticeWechatJob.monitorExecution}" failover="${occurErrorNoticeWechatJob.failover}" description="${occurErrorNoticeWechatJob.description}"
-                    job-error-handler-type="${occurErrorNoticeWechatJob.jobErrorHandlerType}"
-                    disabled="${occurErrorNoticeWechatJob.disabled}" overwrite="${occurErrorNoticeWechatJob.overwrite}" >
-        <props>
-            <prop key="wechat.webhook">https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5308e20a-2900-484b-a332-b5bb701ade04</prop>
-            <prop key="wechat.connectTimeout">3000</prop>
-            <prop key="wechat.readTimeout">5000</prop>
-        </props>
-    </elasticjob:job>
-    
-    <bean id="occurErrorNoticeEmailJob" class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.JavaOccurErrorJob" />
-    
-<!--    <elasticjob:job id="${occurErrorNoticeEmailJob.id}" job-ref="occurErrorNoticeEmailJob" registry-center-ref="regCenter" tracing-ref="elasticJobTrace"-->
-<!--                    sharding-total-count="${occurErrorNoticeEmailJob.shardingTotalCount}" cron="${occurErrorNoticeEmailJob.cron}" sharding-item-parameters="${occurErrorNoticeEmailJob.shardingItemParameters}" -->
-<!--                    monitor-execution="${occurErrorNoticeEmailJob.monitorExecution}" failover="${occurErrorNoticeEmailJob.failover}" description="${occurErrorNoticeEmailJob.description}"-->
-<!--                    job-error-handler-type="${occurErrorNoticeEmailJob.jobErrorHandlerType}"-->
-<!--                    disabled="${occurErrorNoticeEmailJob.disabled}" overwrite="${occurErrorNoticeEmailJob.overwrite}" >-->
-<!--        <props>-->
-<!--            <prop key="email.host">host</prop>-->
-<!--            <prop key="email.port">465</prop>-->
-<!--            <prop key="email.username">username</prop>-->
-<!--            <prop key="email.password">password</prop>-->
-<!--            <prop key="email.protocol">smtp</prop>-->
-<!--            <prop key="email.useSsl">true</prop>-->
-<!--            <prop key="email.subject">ElasticJob error message</prop>-->
-<!--            <prop key="email.form">form@xxx.com</prop>-->
-<!--            <prop key="email.to">to1@xxx.com,to2@xxx.com</prop>-->
-<!--            <prop key="email.cc">cc@xxx.com</prop>-->
-<!--            <prop key="email.bcc">bcc@xxx.com</prop>-->
-<!--            <prop key="email.debug">false</prop>-->
-<!--        </props>-->
-<!--    </elasticjob:job>-->
+
+    <!-- use dingtalk error handler -->
+    <!--    <elasticjob:dingtalk-error-handler id="dingtalkErrorHandlerConfig"-->
+    <!--                                       webhook="https://oapi.dingtalk.com/robot/send?access_token=token"-->
+    <!--                                       keyword="keyword" secret="secret"-->
+    <!--                                       connect-timeout-millisecond="3000"-->
+    <!--                                       read-timeout-millisecond="5000"/>-->
+    <!--    -->
+    <!--    <bean id="occurErrorNoticeDingtalkJob"-->
+    <!--          class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.JavaOccurErrorJob"/>-->
+
+    <!--    <elasticjob:job id="${occurErrorNoticeDingtalkJob.id}" job-ref="occurErrorNoticeDingtalkJob"-->
+    <!--                    registry-center-ref="regCenter" tracing-ref="elasticJobTrace"-->
+    <!--                    sharding-total-count="${occurErrorNoticeDingtalkJob.shardingTotalCount}"-->
+    <!--                    cron="${occurErrorNoticeDingtalkJob.cron}"-->
+    <!--                    sharding-item-parameters="${occurErrorNoticeDingtalkJob.shardingItemParameters}"-->
+    <!--                    monitor-execution="${occurErrorNoticeDingtalkJob.monitorExecution}"-->
+    <!--                    failover="${occurErrorNoticeDingtalkJob.failover}"-->
+    <!--                    description="${occurErrorNoticeDingtalkJob.description}"-->
+    <!--                    job-error-handler-type="${occurErrorNoticeDingtalkJob.jobErrorHandlerType}"-->
+    <!--                    error-handler-config-ref="dingtalkErrorHandlerConfig"-->
+    <!--                    disabled="${occurErrorNoticeDingtalkJob.disabled}"-->
+    <!--                    overwrite="${occurErrorNoticeDingtalkJob.overwrite}" />-->
+
+    <!-- use wechat error handler -->
+    <!--    <bean id="occurErrorNoticeWechatJob"-->
+    <!--          class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.JavaOccurErrorJob"/>-->
+
+    <!--    <elasticjob:wechat-error-handler id="wechatErrorHandlerConfig"-->
+    <!--                                     webhook="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=key"-->
+    <!--                                     connect-timeout-millisecond="3000"-->
+    <!--                                     read-timeout-millisecond="5000"/>-->
+
+    <!--    <elasticjob:job id="${occurErrorNoticeWechatJob.id}" job-ref="occurErrorNoticeWechatJob"-->
+    <!--                    registry-center-ref="regCenter" tracing-ref="elasticJobTrace"-->
+    <!--                    sharding-total-count="${occurErrorNoticeWechatJob.shardingTotalCount}"-->
+    <!--                    cron="${occurErrorNoticeWechatJob.cron}"-->
+    <!--                    sharding-item-parameters="${occurErrorNoticeWechatJob.shardingItemParameters}"-->
+    <!--                    monitor-execution="${occurErrorNoticeWechatJob.monitorExecution}"-->
+    <!--                    failover="${occurErrorNoticeWechatJob.failover}"-->
+    <!--                    description="${occurErrorNoticeWechatJob.description}"-->
+    <!--                    job-error-handler-type="${occurErrorNoticeWechatJob.jobErrorHandlerType}"-->
+    <!--                    error-handler-config-ref="wechatErrorHandlerConfig"-->
+    <!--                    disabled="${occurErrorNoticeWechatJob.disabled}" overwrite="${occurErrorNoticeWechatJob.overwrite}" />-->
+
+    <!-- use email error handler -->
+    <!--    <bean id="occurErrorNoticeEmailJob"-->
+    <!--          class="org.apache.shardingsphere.elasticjob.lite.example.job.simple.JavaOccurErrorJob"/>-->
+
+    <!--    <elasticjob:email-error-handler id="emailErrorHandlerConfig" host="host" port="465" username="username"-->
+    <!--                                    password="password" use-ssl="true" subject="ElasticJob error message"-->
+    <!--                                    from="from@xxx.com" to="to1@xxx.com,to2@xxx.com"-->
+    <!--                                    cc="cc@xxx.com" bcc="bcc@xxx.com"-->
+    <!--                                    debug="false"/>-->
+
+    <!--    <elasticjob:job id="${occurErrorNoticeEmailJob.id}" job-ref="occurErrorNoticeEmailJob"-->
+    <!--                    registry-center-ref="regCenter" tracing-ref="elasticJobTrace"-->
+    <!--                    sharding-total-count="${occurErrorNoticeEmailJob.shardingTotalCount}"-->
+    <!--                    cron="${occurErrorNoticeEmailJob.cron}"-->
+    <!--                    sharding-item-parameters="${occurErrorNoticeEmailJob.shardingItemParameters}"-->
+    <!--                    monitor-execution="${occurErrorNoticeEmailJob.monitorExecution}"-->
+    <!--                    failover="${occurErrorNoticeEmailJob.failover}"-->
+    <!--                    description="${occurErrorNoticeEmailJob.description}"-->
+    <!--                    job-error-handler-type="${occurErrorNoticeEmailJob.jobErrorHandlerType}"-->
+    <!--                    error-handler-config-ref="emailErrorHandlerConfig"-->
+    <!--                    disabled="${occurErrorNoticeEmailJob.disabled}" overwrite="${occurErrorNoticeEmailJob.overwrite}" />-->
 </beans>