Sfoglia il codice sorgente

调度中心告警邮件发送组件改为 “spring-boot-starter-mail”;

xuxueli 7 anni fa
parent
commit
2e6bcbfc8b

+ 13 - 12
doc/XXL-JOB官方文档.md Vedi File

295
 调度中心配置内容说明:
295
 调度中心配置内容说明:
296
 
296
 
297
     ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
297
     ### 调度中心JDBC链接:链接地址请保持和 2.1章节 所创建的调度数据库的地址一致
298
-    xxl.job.db.driverClass=com.mysql.jdbc.Driver
299
-    xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
300
-    xxl.job.db.user=root
301
-    xxl.job.db.password=root_pwd
298
+    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-job?Unicode=true&characterEncoding=UTF-8
299
+    spring.datasource.username=root
300
+    spring.datasource.password=root_pwd
301
+    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
302
     
302
     
303
     ### 报警邮箱
303
     ### 报警邮箱
304
-    xxl.job.mail.host=smtp.163.com
305
-    xxl.job.mail.port=25
306
-    xxl.job.mail.ssl=false
307
-    xxl.job.mail.username=ovono802302@163.com
308
-    xxl.job.mail.password=asdfzxcv
309
-    xxl.job.mail.sendFrom=ovono802302@163.com
310
-    xxl.job.mail.sendNick=《任务调度平台XXL-JOB》
304
+    spring.mail.host=smtp.qq.com
305
+    spring.mail.port=25
306
+    spring.mail.username=xxx@qq.com
307
+    spring.mail.password=xxx
308
+    spring.mail.properties.mail.smtp.auth=true
309
+    spring.mail.properties.mail.smtp.starttls.enable=true
310
+    spring.mail.properties.mail.smtp.starttls.required=true
311
     
311
     
312
     ### 登录账号
312
     ### 登录账号
313
     xxl.job.login.username=admin
313
     xxl.job.login.username=admin
1388
 - 5、执行器启动之后jetty停止的问题修复;
1388
 - 5、执行器启动之后jetty停止的问题修复;
1389
 
1389
 
1390
 ### 6.24 版本 v2.0.2 Release Notes[迭代中]
1390
 ### 6.24 版本 v2.0.2 Release Notes[迭代中]
1391
-- 1、[迭代中]任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。考虑通过任务Log字段控制告警状态;
1391
+- 1、调度中心告警邮件发送组件改为 “spring-boot-starter-mail”;
1392
+- 2、[迭代中]任务告警逻辑调整:任务调度,以及任务回调失败时,均推送监控队列。考虑通过任务Log字段控制告警状态;
1392
 
1393
 
1393
 
1394
 
1394
 ### TODO LIST
1395
 ### TODO LIST

+ 0 - 1
pom.xml Vedi File

40
 		<commons-exec.version>1.3</commons-exec.version>
40
 		<commons-exec.version>1.3</commons-exec.version>
41
 		<commons-collections4.version>4.2</commons-collections4.version>
41
 		<commons-collections4.version>4.2</commons-collections4.version>
42
 		<commons-lang3.version>3.8.1</commons-lang3.version>
42
 		<commons-lang3.version>3.8.1</commons-lang3.version>
43
-		<commons-email.version>1.5</commons-email.version>
44
 
43
 
45
 		<groovy-all.version>2.5.3</groovy-all.version>
44
 		<groovy-all.version>2.5.3</groovy-all.version>
46
 		<quartz.version>2.3.0</quartz.version>
45
 		<quartz.version>2.3.0</quartz.version>

+ 9 - 6
xxl-job-admin/pom.xml Vedi File

69
 			<artifactId>spring-boot-starter-freemarker</artifactId>
69
 			<artifactId>spring-boot-starter-freemarker</artifactId>
70
 		</dependency>
70
 		</dependency>
71
 
71
 
72
+		<!-- mail-starter -->
73
+		<dependency>
74
+			<groupId>org.springframework.boot</groupId>
75
+			<artifactId>spring-boot-starter-mail</artifactId>
76
+		</dependency>
77
+
72
 		<!-- mybatis-starter:mybatis + mybatis-spring + tomcat-jdbc(default) -->
78
 		<!-- mybatis-starter:mybatis + mybatis-spring + tomcat-jdbc(default) -->
73
 		<dependency>
79
 		<dependency>
74
 			<groupId>org.mybatis.spring.boot</groupId>
80
 			<groupId>org.mybatis.spring.boot</groupId>
94
 			<artifactId>commons-lang3</artifactId>
100
 			<artifactId>commons-lang3</artifactId>
95
 			<version>${commons-lang3.version}</version>
101
 			<version>${commons-lang3.version}</version>
96
 		</dependency>
102
 		</dependency>
97
-		<!-- commons-email -->
98
-		<dependency>
99
-			<groupId>org.apache.commons</groupId>
100
-			<artifactId>commons-email</artifactId>
101
-			<version>${commons-email.version}</version>
102
-		</dependency>
103
+
104
+
105
+
103
 
106
 
104
 		<!-- quartz :quartz-2.2.3/c3p0-0.9.1.1/slf4j-api-1.6.6 -->
107
 		<!-- quartz :quartz-2.2.3/c3p0-0.9.1.1/slf4j-api-1.6.6 -->
105
 		<dependency>
108
 		<dependency>

+ 19 - 48
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java Vedi File

8
 import org.springframework.beans.factory.InitializingBean;
8
 import org.springframework.beans.factory.InitializingBean;
9
 import org.springframework.beans.factory.annotation.Value;
9
 import org.springframework.beans.factory.annotation.Value;
10
 import org.springframework.context.annotation.Configuration;
10
 import org.springframework.context.annotation.Configuration;
11
+import org.springframework.mail.javamail.JavaMailSender;
11
 
12
 
12
 import javax.annotation.Resource;
13
 import javax.annotation.Resource;
13
 
14
 
30
 
31
 
31
     // conf
32
     // conf
32
 
33
 
33
-    @Value("${xxl.job.mail.host}")
34
-    private String mailHost;
35
-
36
-    @Value("${xxl.job.mail.port}")
37
-    private String mailPort;
38
-
39
-    @Value("${xxl.job.mail.ssl}")
40
-    private boolean mailSSL;
41
-
42
-    @Value("${xxl.job.mail.username}")
43
-    private String mailUsername;
44
-
45
-    @Value("${xxl.job.mail.password}")
46
-    private String mailPassword;
47
-
48
-    @Value("${xxl.job.mail.sendNick}")
49
-    private String mailSendNick;
50
-
51
     @Value("${xxl.job.login.username}")
34
     @Value("${xxl.job.login.username}")
52
     private String loginUsername;
35
     private String loginUsername;
53
 
36
 
60
     @Value("${xxl.job.accessToken}")
43
     @Value("${xxl.job.accessToken}")
61
     private String accessToken;
44
     private String accessToken;
62
 
45
 
46
+    @Value("${spring.mail.username}")
47
+    private String emailUserName;
48
+
63
     // dao, service
49
     // dao, service
64
 
50
 
65
     @Resource
51
     @Resource
66
-    public XxlJobLogDao xxlJobLogDao;
52
+    private XxlJobLogDao xxlJobLogDao;
67
     @Resource
53
     @Resource
68
-    public XxlJobInfoDao xxlJobInfoDao;
54
+    private XxlJobInfoDao xxlJobInfoDao;
69
     @Resource
55
     @Resource
70
-    public XxlJobRegistryDao xxlJobRegistryDao;
56
+    private XxlJobRegistryDao xxlJobRegistryDao;
71
     @Resource
57
     @Resource
72
-    public XxlJobGroupDao xxlJobGroupDao;
58
+    private XxlJobGroupDao xxlJobGroupDao;
73
     @Resource
59
     @Resource
74
-    public AdminBiz adminBiz;
75
-
76
-
77
-    public String getMailHost() {
78
-        return mailHost;
79
-    }
80
-
81
-    public String getMailPort() {
82
-        return mailPort;
83
-    }
84
-
85
-    public boolean isMailSSL() {
86
-        return mailSSL;
87
-    }
88
-
89
-    public String getMailUsername() {
90
-        return mailUsername;
91
-    }
92
-
93
-    public String getMailPassword() {
94
-        return mailPassword;
95
-    }
96
-
97
-    public String getMailSendNick() {
98
-        return mailSendNick;
99
-    }
60
+    private AdminBiz adminBiz;
61
+    @Resource
62
+    private JavaMailSender mailSender;
100
 
63
 
101
     public String getLoginUsername() {
64
     public String getLoginUsername() {
102
         return loginUsername;
65
         return loginUsername;
114
         return accessToken;
77
         return accessToken;
115
     }
78
     }
116
 
79
 
80
+    public String getEmailUserName() {
81
+        return emailUserName;
82
+    }
83
+
117
     public XxlJobLogDao getXxlJobLogDao() {
84
     public XxlJobLogDao getXxlJobLogDao() {
118
         return xxlJobLogDao;
85
         return xxlJobLogDao;
119
     }
86
     }
134
         return adminBiz;
101
         return adminBiz;
135
     }
102
     }
136
 
103
 
104
+    public JavaMailSender getMailSender() {
105
+        return mailSender;
106
+    }
107
+
137
 }
108
 }

+ 22 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java Vedi File

4
 import com.xxl.job.admin.core.model.XxlJobGroup;
4
 import com.xxl.job.admin.core.model.XxlJobGroup;
5
 import com.xxl.job.admin.core.model.XxlJobInfo;
5
 import com.xxl.job.admin.core.model.XxlJobInfo;
6
 import com.xxl.job.admin.core.model.XxlJobLog;
6
 import com.xxl.job.admin.core.model.XxlJobLog;
7
-import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
8
 import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
7
 import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
9
 import com.xxl.job.admin.core.util.I18nUtil;
8
 import com.xxl.job.admin.core.util.I18nUtil;
10
-import com.xxl.job.admin.core.util.MailUtil;
11
 import com.xxl.job.core.biz.model.ReturnT;
9
 import com.xxl.job.core.biz.model.ReturnT;
12
 import com.xxl.job.core.handler.IJobHandler;
10
 import com.xxl.job.core.handler.IJobHandler;
13
 import org.apache.commons.collections4.CollectionUtils;
11
 import org.apache.commons.collections4.CollectionUtils;
14
 import org.slf4j.Logger;
12
 import org.slf4j.Logger;
15
 import org.slf4j.LoggerFactory;
13
 import org.slf4j.LoggerFactory;
14
+import org.springframework.mail.javamail.MimeMessageHelper;
16
 
15
 
16
+import javax.mail.MessagingException;
17
+import javax.mail.internet.MimeMessage;
18
+import java.io.UnsupportedEncodingException;
17
 import java.text.MessageFormat;
19
 import java.text.MessageFormat;
18
 import java.util.*;
20
 import java.util.*;
19
 import java.util.concurrent.LinkedBlockingQueue;
21
 import java.util.concurrent.LinkedBlockingQueue;
173
 
175
 
174
 			String alarmContent = "Alarm Job LogId=" + jobLog.getId();
176
 			String alarmContent = "Alarm Job LogId=" + jobLog.getId();
175
 			if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
177
 			if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
176
-				alarmContent += "<br>TriggerMsg=" + jobLog.getTriggerMsg();
178
+				alarmContent += "<br>TriggerMsg=<br>" + jobLog.getTriggerMsg();
177
 			}
179
 			}
178
 			if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
180
 			if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
179
 				alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
181
 				alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
183
 			for (String email: emailSet) {
185
 			for (String email: emailSet) {
184
 				XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
186
 				XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
185
 
187
 
188
+				String personal = I18nUtil.getString("admin_name_full");
186
 				String title = I18nUtil.getString("jobconf_monitor");
189
 				String title = I18nUtil.getString("jobconf_monitor");
187
 				String content = MessageFormat.format(mailBodyTemplate,
190
 				String content = MessageFormat.format(mailBodyTemplate,
188
 						group!=null?group.getTitle():"null",
191
 						group!=null?group.getTitle():"null",
190
 						info.getJobDesc(),
193
 						info.getJobDesc(),
191
 						alarmContent);
194
 						alarmContent);
192
 
195
 
193
-				MailUtil.sendMail(email, title, content);
196
+
197
+				// make mail
198
+				try {
199
+					MimeMessage mimeMessage = XxlJobAdminConfig.getAdminConfig().getMailSender().createMimeMessage();
200
+
201
+					MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
202
+					helper.setFrom(XxlJobAdminConfig.getAdminConfig().getEmailUserName(), personal);
203
+					helper.setTo(email);
204
+					helper.setSubject(title);
205
+					helper.setText(content, true);
206
+
207
+					XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage);
208
+				} catch (UnsupportedEncodingException | MessagingException e) {
209
+					logger.error(">>>>>>>>>>> job monitor alarm email send error, JobLogId:{}", jobLog.getId(), e);
210
+				}
211
+
194
 			}
212
 			}
195
 		}
213
 		}
196
 
214
 

+ 0 - 65
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/MailUtil.java Vedi File

1
-package com.xxl.job.admin.core.util;
2
-
3
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4
-import org.apache.commons.mail.DefaultAuthenticator;
5
-import org.apache.commons.mail.EmailException;
6
-import org.apache.commons.mail.HtmlEmail;
7
-import org.slf4j.Logger;
8
-import org.slf4j.LoggerFactory;
9
-
10
-import java.nio.charset.Charset;
11
-
12
-/**
13
- * 邮件发送.Util
14
- *
15
- * @author xuxueli 2016-3-12 15:06:20
16
- */
17
-public class MailUtil {
18
-	private static Logger logger = LoggerFactory.getLogger(MailUtil.class);
19
-	
20
-	/**
21
-	 *
22
-	 * @param toAddress		收件人邮箱
23
-	 * @param mailSubject	邮件主题
24
-	 * @param mailBody		邮件正文
25
-	 * @return
26
-	 */
27
-	public static boolean sendMail(String toAddress, String mailSubject, String mailBody){
28
-
29
-		try {
30
-			// Create the email message
31
-			HtmlEmail email = new HtmlEmail();
32
-
33
-			//email.setDebug(true);		// 将会打印一些log
34
-			//email.setTLS(true);		// 是否TLS校验,,某些邮箱需要TLS安全校验,同理有SSL校验
35
-			//email.setSSL(true);
36
-
37
-			email.setHostName(XxlJobAdminConfig.getAdminConfig().getMailHost());
38
-
39
-			if (XxlJobAdminConfig.getAdminConfig().isMailSSL()) {
40
-				email.setSslSmtpPort(XxlJobAdminConfig.getAdminConfig().getMailPort());
41
-				email.setSSLOnConnect(true);
42
-			} else {
43
-				email.setSmtpPort(Integer.valueOf(XxlJobAdminConfig.getAdminConfig().getMailPort()));
44
-			}
45
-
46
-			email.setAuthenticator(new DefaultAuthenticator(XxlJobAdminConfig.getAdminConfig().getMailUsername(), XxlJobAdminConfig.getAdminConfig().getMailPassword()));
47
-			email.setCharset("UTF-8");
48
-
49
-			email.setFrom(XxlJobAdminConfig.getAdminConfig().getMailUsername(), XxlJobAdminConfig.getAdminConfig().getMailSendNick());
50
-			email.addTo(toAddress);
51
-			email.setSubject(mailSubject);
52
-			email.setMsg(mailBody);
53
-
54
-			//email.attach(attachment);	// add the attachment
55
-
56
-			email.send();				// send the email
57
-			return true;
58
-		} catch (EmailException e) {
59
-			logger.error(e.getMessage(), e);
60
-
61
-		}
62
-		return false;
63
-	}
64
-
65
-}

+ 1 - 1
xxl-job-admin/src/main/resources/i18n/message.properties Vedi File

209
 jobconf_route_shard=分片广播
209
 jobconf_route_shard=分片广播
210
 jobconf_idleBeat=空闲检测
210
 jobconf_idleBeat=空闲检测
211
 jobconf_beat=心跳检测
211
 jobconf_beat=心跳检测
212
-jobconf_monitor=调度中心监控报警
212
+jobconf_monitor=任务调度中心监控报警
213
 jobconf_monitor_detail=监控告警明细
213
 jobconf_monitor_detail=监控告警明细
214
 jobconf_monitor_alarm_title=告警类型
214
 jobconf_monitor_alarm_title=告警类型
215
 jobconf_monitor_alarm_type=调度失败
215
 jobconf_monitor_alarm_type=调度失败

+ 1 - 1
xxl-job-admin/src/main/resources/i18n/message_en.properties Vedi File

209
 jobconf_route_shard=Sharding Broadcast
209
 jobconf_route_shard=Sharding Broadcast
210
 jobconf_idleBeat=Idle check
210
 jobconf_idleBeat=Idle check
211
 jobconf_beat=Heartbeats
211
 jobconf_beat=Heartbeats
212
-jobconf_monitor=Scheduling Center monitor alarm
212
+jobconf_monitor=Task Scheduling Center monitor alarm
213
 jobconf_monitor_detail=monitor alarm details
213
 jobconf_monitor_detail=monitor alarm details
214
 jobconf_monitor_alarm_title=Alarm Type
214
 jobconf_monitor_alarm_title=Alarm Type
215
 jobconf_monitor_alarm_type=Trigger Fail
215
 jobconf_monitor_alarm_type=Trigger Fail