Parcourir la source

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

xuxueli il y a 6 ans
Parent
révision
502e650300

+ 13 - 12
doc/XXL-JOB官方文档.md Voir le fichier

@@ -295,19 +295,19 @@ XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是
295 295
 调度中心配置内容说明:
296 296
 
297 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 313
     xxl.job.login.username=admin
@@ -1388,7 +1388,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
1388 1388
 - 5、执行器启动之后jetty停止的问题修复;
1389 1389
 
1390 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 1395
 ### TODO LIST

+ 0 - 1
pom.xml Voir le fichier

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

+ 9 - 6
xxl-job-admin/pom.xml Voir le fichier

@@ -69,6 +69,12 @@
69 69
 			<artifactId>spring-boot-starter-freemarker</artifactId>
70 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 78
 		<!-- mybatis-starter:mybatis + mybatis-spring + tomcat-jdbc(default) -->
73 79
 		<dependency>
74 80
 			<groupId>org.mybatis.spring.boot</groupId>
@@ -94,12 +100,9 @@
94 100
 			<artifactId>commons-lang3</artifactId>
95 101
 			<version>${commons-lang3.version}</version>
96 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 107
 		<!-- quartz :quartz-2.2.3/c3p0-0.9.1.1/slf4j-api-1.6.6 -->
105 108
 		<dependency>

+ 19 - 48
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java Voir le fichier

@@ -8,6 +8,7 @@ import com.xxl.job.core.biz.AdminBiz;
8 8
 import org.springframework.beans.factory.InitializingBean;
9 9
 import org.springframework.beans.factory.annotation.Value;
10 10
 import org.springframework.context.annotation.Configuration;
11
+import org.springframework.mail.javamail.JavaMailSender;
11 12
 
12 13
 import javax.annotation.Resource;
13 14
 
@@ -30,24 +31,6 @@ public class XxlJobAdminConfig implements InitializingBean{
30 31
 
31 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 34
     @Value("${xxl.job.login.username}")
52 35
     private String loginUsername;
53 36
 
@@ -60,43 +43,23 @@ public class XxlJobAdminConfig implements InitializingBean{
60 43
     @Value("${xxl.job.accessToken}")
61 44
     private String accessToken;
62 45
 
46
+    @Value("${spring.mail.username}")
47
+    private String emailUserName;
48
+
63 49
     // dao, service
64 50
 
65 51
     @Resource
66
-    public XxlJobLogDao xxlJobLogDao;
52
+    private XxlJobLogDao xxlJobLogDao;
67 53
     @Resource
68
-    public XxlJobInfoDao xxlJobInfoDao;
54
+    private XxlJobInfoDao xxlJobInfoDao;
69 55
     @Resource
70
-    public XxlJobRegistryDao xxlJobRegistryDao;
56
+    private XxlJobRegistryDao xxlJobRegistryDao;
71 57
     @Resource
72
-    public XxlJobGroupDao xxlJobGroupDao;
58
+    private XxlJobGroupDao xxlJobGroupDao;
73 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 64
     public String getLoginUsername() {
102 65
         return loginUsername;
@@ -114,6 +77,10 @@ public class XxlJobAdminConfig implements InitializingBean{
114 77
         return accessToken;
115 78
     }
116 79
 
80
+    public String getEmailUserName() {
81
+        return emailUserName;
82
+    }
83
+
117 84
     public XxlJobLogDao getXxlJobLogDao() {
118 85
         return xxlJobLogDao;
119 86
     }
@@ -134,4 +101,8 @@ public class XxlJobAdminConfig implements InitializingBean{
134 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 Voir le fichier

@@ -4,16 +4,18 @@ import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
5 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
6 6
 import com.xxl.job.admin.core.model.XxlJobLog;
7
-import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
8 7
 import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
9 8
 import com.xxl.job.admin.core.util.I18nUtil;
10
-import com.xxl.job.admin.core.util.MailUtil;
11 9
 import com.xxl.job.core.biz.model.ReturnT;
12 10
 import com.xxl.job.core.handler.IJobHandler;
13 11
 import org.apache.commons.collections4.CollectionUtils;
14 12
 import org.slf4j.Logger;
15 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 19
 import java.text.MessageFormat;
18 20
 import java.util.*;
19 21
 import java.util.concurrent.LinkedBlockingQueue;
@@ -173,7 +175,7 @@ public class JobFailMonitorHelper {
173 175
 
174 176
 			String alarmContent = "Alarm Job LogId=" + jobLog.getId();
175 177
 			if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
176
-				alarmContent += "<br>TriggerMsg=" + jobLog.getTriggerMsg();
178
+				alarmContent += "<br>TriggerMsg=<br>" + jobLog.getTriggerMsg();
177 179
 			}
178 180
 			if (jobLog.getHandleCode()>0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
179 181
 				alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
@@ -183,6 +185,7 @@ public class JobFailMonitorHelper {
183 185
 			for (String email: emailSet) {
184 186
 				XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
185 187
 
188
+				String personal = I18nUtil.getString("admin_name_full");
186 189
 				String title = I18nUtil.getString("jobconf_monitor");
187 190
 				String content = MessageFormat.format(mailBodyTemplate,
188 191
 						group!=null?group.getTitle():"null",
@@ -190,7 +193,22 @@ public class JobFailMonitorHelper {
190 193
 						info.getJobDesc(),
191 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 Voir le fichier

@@ -1,65 +0,0 @@
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
-}

+ 8 - 6
xxl-job-admin/src/main/resources/application.properties Voir le fichier

@@ -28,12 +28,14 @@ spring.datasource.tomcat.max-active=30
28 28
 spring.datasource.tomcat.test-on-borrow=true
29 29
 
30 30
 ### xxl-job email
31
-xxl.job.mail.host=smtp.163.com
32
-xxl.job.mail.port=25
33
-xxl.job.mail.ssl=false
34
-xxl.job.mail.username=ovono802302@163.com
35
-xxl.job.mail.password=asdfzxcv
36
-xxl.job.mail.sendNick=《任务调度平台XXL-JOB》
31
+spring.mail.host=smtp.qq.com
32
+spring.mail.port=25
33
+spring.mail.username=xxx@qq.com
34
+spring.mail.password=xxx
35
+spring.mail.properties.mail.smtp.auth=true
36
+spring.mail.properties.mail.smtp.starttls.enable=true
37
+spring.mail.properties.mail.smtp.starttls.required=true
38
+
37 39
 
38 40
 ### xxl-job login
39 41
 xxl.job.login.username=admin

+ 1 - 1
xxl-job-admin/src/main/resources/i18n/message.properties Voir le fichier

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

+ 1 - 1
xxl-job-admin/src/main/resources/i18n/message_en.properties Voir le fichier

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