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>