You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by te...@apache.org on 2020/09/25 09:23:38 UTC
[shardingsphere-elasticjob] branch master updated: Support system
properties as config for email error handler and update the relative doc.
(#1500)
This is an automated email from the ASF dual-hosted git repository.
technoboy 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 77c590d Support system properties as config for email error handler and update the relative doc. (#1500)
77c590d is described below
commit 77c590d779fdd720c2ec9b4fa8ae7f98fbcfb1ec
Author: luky116 <38...@users.noreply.github.com>
AuthorDate: Fri Sep 25 17:23:21 2020 +0800
Support system properties as config for email error handler and update the relative doc. (#1500)
---
docs/content/dev-manual/error-handler.cn.md | 1 +
docs/content/dev-manual/error-handler.en.md | 1 +
.../error/handler/email/ConfigurationLoader.java | 42 +++++++++++++++--
.../error/handler/email/EmailJobErrorHandler.java | 5 +-
.../resources/{ => conf}/error-handler-email.yaml | 1 +
.../handler/email/EmailJobErrorHandlerTest.java | 55 ++++++++++++++++++++--
.../resources/{ => conf}/error-handler-email.yaml | 16 ++++---
.../main/resources/conf}/error-handler-email.yaml | 17 +++----
8 files changed, 114 insertions(+), 24 deletions(-)
diff --git a/docs/content/dev-manual/error-handler.cn.md b/docs/content/dev-manual/error-handler.cn.md
index 3973130..2b51ffb 100644
--- a/docs/content/dev-manual/error-handler.cn.md
+++ b/docs/content/dev-manual/error-handler.cn.md
@@ -14,6 +14,7 @@ weight = 3
| --------------------- | ------------------------------ |
| LogJobErrorHandler | 记录作业异常日志,但不中断作业执行 |
| DingtalkJobErrorHandler | 记录作业异常日志,但不中断作业执行,并且发送钉钉消息通知 |
+| EmailJobErrorHandler | 记录作业异常日志,但不中断作业执行,并且发送邮件消息通知 |
| ThrowJobErrorHandler | 抛出系统异常并中断作业执行 |
| IgnoreJobErrorHandler | 忽略系统异常且不中断作业执行 |
| WechatJobErrorHandler | 记录作业异常日志,但不中断作业执行,并且发送企业微信消息通知 |
diff --git a/docs/content/dev-manual/error-handler.en.md b/docs/content/dev-manual/error-handler.en.md
index 965ef96..44956a4 100644
--- a/docs/content/dev-manual/error-handler.en.md
+++ b/docs/content/dev-manual/error-handler.en.md
@@ -14,6 +14,7 @@ Error handler strategy, used to handle error when exception occur during job exe
| ---------------------- | ----------------------------------------- |
| LogJobErrorHandler | Log error and do not interrupt job |
| DingtalkJobErrorHandler | Log error and do not interrupt job and send dingtalk message notification |
+| EmailJobErrorHandler | Log error and do not interrupt job and send email message notification |
| ThrowJobErrorHandler | Throw system exception and interrupt job |
| IgnoreJobErrorHandler | Ignore exception and do not interrupt job |
| WechatJobErrorHandler | Log error and do not interrupt job and send wechat message notification |
diff --git a/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/ConfigurationLoader.java b/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/ConfigurationLoader.java
index a6dc3bd..3b28ef2 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/ConfigurationLoader.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/ConfigurationLoader.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.elasticjob.error.handler.email;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
import org.apache.shardingsphere.elasticjob.infra.yaml.YamlEngine;
import java.io.InputStream;
@@ -29,18 +30,49 @@ import java.io.InputStream;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ConfigurationLoader {
- private static final String ERROR_HANDLER_CONFIG = "error-handler-email.yaml";
+ private static final String ERROR_HANDLER_CONFIG = "conf/error-handler-email.yaml";
/**
* Unmarshal YAML.
*
* @param prefix config prefix
- * @param classType class type
- * @param <T> type of class
* @return object from YAML
*/
- public static <T> T buildConfigByYaml(final String prefix, final Class<T> classType) {
+ public static EmailConfiguration buildConfigByYaml(final String prefix) {
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(ERROR_HANDLER_CONFIG);
- return YamlEngine.unmarshal(prefix, inputStream, classType);
+ return YamlEngine.unmarshal(prefix, inputStream, EmailConfiguration.class);
+ }
+
+ /**
+ * read system properties.
+ *
+ * @return object from system properties
+ */
+ public static EmailConfiguration buildConfigBySystemProperties() {
+ String isBySystemProperties = System.getProperty("error-handler-email.use-system-properties");
+ if (!Boolean.valueOf(isBySystemProperties)) {
+ return null;
+ }
+ EmailConfiguration emailConfiguration = new EmailConfiguration();
+ emailConfiguration.setHost(System.getProperty("error-handler-email.host"));
+ emailConfiguration.setUsername(System.getProperty("error-handler-email.username"));
+ emailConfiguration.setPassword(System.getProperty("error-handler-email.password"));
+ emailConfiguration.setFrom(System.getProperty("error-handler-email.from"));
+ emailConfiguration.setTo(System.getProperty("error-handler-email.to"));
+ emailConfiguration.setCc(System.getProperty("error-handler-email.cc"));
+ emailConfiguration.setBcc(System.getProperty("error-handler-email.bcc"));
+ String protocol = System.getProperty("error-handler-email.protocol");
+ String subject = System.getProperty("error-handler-email.subject");
+ String port = System.getProperty("error-handler-email.port");
+ if (StringUtils.isNotBlank(protocol)) {
+ emailConfiguration.setProtocol(System.getProperty("error-handler-email.protocol"));
+ }
+ if (StringUtils.isNotBlank(subject)) {
+ emailConfiguration.setSubject(subject);
+ }
+ if (StringUtils.isNotBlank(port)) {
+ emailConfiguration.setPort(Integer.valueOf(port));
+ }
+ return emailConfiguration;
}
}
diff --git a/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandler.java b/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandler.java
index 554e558..34702bf 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandler.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-email/src/main/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandler.java
@@ -68,7 +68,10 @@ public final class EmailJobErrorHandler implements JobErrorHandler {
}
private void loadConfiguration() {
- emailConfiguration = ConfigurationLoader.buildConfigByYaml(CONFIG_PREFIX, EmailConfiguration.class);
+ emailConfiguration = ConfigurationLoader.buildConfigBySystemProperties();
+ if (null == emailConfiguration) {
+ emailConfiguration = ConfigurationLoader.buildConfigByYaml(CONFIG_PREFIX);
+ }
}
@Override
diff --git a/elasticjob-error-handler/elasticjob-error-handler-email/src/main/resources/error-handler-email.yaml b/elasticjob-error-handler/elasticjob-error-handler-email/src/main/resources/conf/error-handler-email.yaml
similarity index 98%
rename from elasticjob-error-handler/elasticjob-error-handler-email/src/main/resources/error-handler-email.yaml
rename to elasticjob-error-handler/elasticjob-error-handler-email/src/main/resources/conf/error-handler-email.yaml
index 404bb4e..08fcb90 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-email/src/main/resources/error-handler-email.yaml
+++ b/elasticjob-error-handler/elasticjob-error-handler-email/src/main/resources/conf/error-handler-email.yaml
@@ -24,3 +24,4 @@ email:
from: xxx
to: xxx
cc: xxx
+ bcc: xxx
diff --git a/elasticjob-error-handler/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java b/elasticjob-error-handler/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java
index 62c6cdf..d5a761c 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java
+++ b/elasticjob-error-handler/elasticjob-error-handler-email/src/test/java/org/apache/shardingsphere/elasticjob/error/handler/email/EmailJobErrorHandlerTest.java
@@ -27,6 +27,7 @@ import org.slf4j.Logger;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.verify;
@@ -37,9 +38,42 @@ public final class EmailJobErrorHandlerTest {
private Logger log;
@Test
- public void assertHandleExceptionFor() {
+ @SneakyThrows
+ public void assertHandleExceptionWithYAMLConfiguration() {
+ resetSystemProperties();
+ EmailJobErrorHandler emailJobErrorHandler = new EmailJobErrorHandler();
+ emailJobErrorHandler.handleException("test job name", new RuntimeException("test exception"));
+ Field field = emailJobErrorHandler.getClass().getDeclaredField("emailConfiguration");
+ field.setAccessible(true);
+ EmailConfiguration emailConfiguration = (EmailConfiguration) field.get(emailJobErrorHandler);
+ assertNotNull(emailConfiguration);
+ assertThat(emailConfiguration.getHost(), equalTo("yaml.email.com"));
+ assertThat(emailConfiguration.getPort(), equalTo(123));
+ assertThat(emailConfiguration.getUsername(), equalTo("yaml.username"));
+ assertThat(emailConfiguration.getFrom(), equalTo("yaml.from@ejob.com"));
+ assertThat(emailConfiguration.getTo(), equalTo("yaml.to@ejob.com"));
+ assertThat(emailConfiguration.getBcc(), equalTo("yaml.bcc@ejob.com"));
+ assertThat(emailConfiguration.getProtocol(), equalTo("yaml.smtp"));
+ assertThat(emailConfiguration.getSubject(), equalTo("yaml.subject"));
+ }
+
+ @Test
+ @SneakyThrows
+ public void assertHandleExceptionWithSystemPropertiesConfiguration() {
+ initSystemProperties();
EmailJobErrorHandler emailJobErrorHandler = new EmailJobErrorHandler();
emailJobErrorHandler.handleException("test job name", new RuntimeException("test exception"));
+ Field field = emailJobErrorHandler.getClass().getDeclaredField("emailConfiguration");
+ field.setAccessible(true);
+ EmailConfiguration emailConfiguration = (EmailConfiguration) field.get(emailJobErrorHandler);
+ assertNotNull(emailConfiguration);
+ assertThat(emailConfiguration.getHost(), equalTo("system.email.com"));
+ assertThat(emailConfiguration.getPort(), equalTo(345));
+ assertThat(emailConfiguration.getUsername(), equalTo("system.username"));
+ assertThat(emailConfiguration.getFrom(), equalTo("system.from@ejob.com"));
+ assertThat(emailConfiguration.getTo(), equalTo("system.to@ejob.com"));
+ assertThat(emailConfiguration.getCc(), equalTo("system.cc@ejob.com"));
+ assertThat(emailConfiguration.getProtocol(), equalTo("smtp"));
}
@Test
@@ -49,9 +83,7 @@ public final class EmailJobErrorHandlerTest {
Field emailConfigurationField = EmailJobErrorHandler.class.getDeclaredField("emailConfiguration");
emailConfigurationField.setAccessible(true);
emailConfigurationField.set(emailJobErrorHandler, null);
-
setStaticFieldValue(emailJobErrorHandler);
-
Throwable cause = new RuntimeException("test exception");
emailJobErrorHandler.handleException("test job name", cause);
verify(log).error(ArgumentMatchers.any(String.class), ArgumentMatchers.any(NullPointerException.class));
@@ -72,4 +104,21 @@ public final class EmailJobErrorHandlerTest {
EmailJobErrorHandler emailJobErrorHandler = new EmailJobErrorHandler();
assertThat(emailJobErrorHandler.getType(), equalTo("EMAIL"));
}
+
+ private void initSystemProperties() {
+ System.setProperty("error-handler-email.use-system-properties", "true");
+ System.setProperty("error-handler-email.host", "system.email.com");
+ System.setProperty("error-handler-email.port", "345");
+ System.setProperty("error-handler-email.username", "system.username");
+ System.setProperty("error-handler-email.password", "system.password");
+ System.setProperty("error-handler-email.subject", "system.subject");
+ System.setProperty("error-handler-email.from", "system.from@ejob.com");
+ System.setProperty("error-handler-email.to", "system.to@ejob.com");
+ System.setProperty("error-handler-email.cc", "system.cc@ejob.com");
+ System.setProperty("error-handler-email.bcc", "system.bcc@ejob.com");
+ }
+
+ private void resetSystemProperties() {
+ System.setProperty("error-handler-email.use-system-properties", "false");
+ }
}
diff --git a/elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/error-handler-email.yaml b/elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/conf/error-handler-email.yaml
similarity index 78%
copy from elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/error-handler-email.yaml
copy to elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/conf/error-handler-email.yaml
index be04b98..4a0c252 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/error-handler-email.yaml
+++ b/elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/conf/error-handler-email.yaml
@@ -16,11 +16,13 @@
#
email:
- host: test.mail.com
+ host: yaml.email.com
port: 123
- username: username
- password: password
- protocol: smtp
- from: testmail@qiyi.com
- to: xxx1@ejob.com
- cc: xxx2@ejob.com
+ username: yaml.username
+ password: yaml.password
+ protocol: yaml.smtp
+ subject: yaml.subject
+ from: yaml.from@ejob.com
+ to: yaml.to@ejob.com
+ cc: yaml.cc@ejob.com
+ bcc: yaml.bcc@ejob.com
diff --git a/elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/error-handler-email.yaml b/examples/elasticjob-example-lite-java/src/main/resources/conf/error-handler-email.yaml
similarity index 83%
rename from elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/error-handler-email.yaml
rename to examples/elasticjob-example-lite-java/src/main/resources/conf/error-handler-email.yaml
index be04b98..7d2f7c1 100644
--- a/elasticjob-error-handler/elasticjob-error-handler-email/src/test/resources/error-handler-email.yaml
+++ b/examples/elasticjob-example-lite-java/src/main/resources/conf/error-handler-email.yaml
@@ -16,11 +16,12 @@
#
email:
- host: test.mail.com
- port: 123
- username: username
- password: password
- protocol: smtp
- from: testmail@qiyi.com
- to: xxx1@ejob.com
- cc: xxx2@ejob.com
+ host:
+ port:
+ username:
+ password:
+ protocol:
+ from:
+ to:
+ cc:
+ bcc: