xueli.xue vor 8 Jahren
Ursprung
Commit
7b3d53fa1c

+ 1 - 1
README.md Datei anzeigen

857
 更多接入公司,欢迎在github [登记](https://github.com/xuxueli/xxl-job/issues/1 )
857
 更多接入公司,欢迎在github [登记](https://github.com/xuxueli/xxl-job/issues/1 )
858
 
858
 
859
 ---
859
 ---
860
-#### 支持的话可以扫一扫,支持 [XXL系列](https://github.com/xuxueli) 的建设
860
+#### 支持的话可以扫一扫,支持 [XXL系列](https://github.com/xuxueli) 的建设:)
861
 
861
 
862
 ![输入图片说明](http://images2015.cnblogs.com/blog/554415/201605/554415-20160513183306234-1939652116.png "在这里输入图片标题")
862
 ![输入图片说明](http://images2015.cnblogs.com/blog/554415/201605/554415-20160513183306234-1939652116.png "在这里输入图片标题")

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/LocalNomalJobBean.java Datei anzeigen

20
 //import com.xxl.job.client.util.JacksonUtil;
20
 //import com.xxl.job.client.util.JacksonUtil;
21
 //import com.xxl.job.core.model.XxlJobInfo;
21
 //import com.xxl.job.core.model.XxlJobInfo;
22
 //import com.xxl.job.core.model.XxlJobLog;
22
 //import com.xxl.job.core.model.XxlJobLog;
23
-//import com.xxl.job.core.thread.JobMonitorHelper;
23
+//import com.xxl.job.core.thread.JobFailMonitorHelper;
24
 //import com.xxl.job.core.util.DynamicSchedulerUtil;
24
 //import com.xxl.job.core.util.DynamicSchedulerUtil;
25
 //
25
 //
26
 ///**
26
 ///**
84
 //		// update trigger info
84
 //		// update trigger info
85
 //		DynamicSchedulerUtil.xxlJobLogDao.updateTriggerInfo(jobLog);
85
 //		DynamicSchedulerUtil.xxlJobLogDao.updateTriggerInfo(jobLog);
86
 //		DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(jobLog);
86
 //		DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(jobLog);
87
-//		JobMonitorHelper.monitor(jobLog.getId());
87
+//		JobFailMonitorHelper.monitor(jobLog.getId());
88
 //		logger.info(">>>>>>>>>>> xxl-job trigger end, jobLog.id:{}, jobLog:{}", jobLog.getId(), jobLog);
88
 //		logger.info(">>>>>>>>>>> xxl-job trigger end, jobLog.id:{}, jobLog:{}", jobLog.getId(), jobLog);
89
 //		
89
 //		
90
 //    }
90
 //    }

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java Datei anzeigen

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.route.ExecutorRouteStrategyEnum;
7
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
8
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
8
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
9
-import com.xxl.job.admin.core.thread.JobMonitorHelper;
9
+import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
10
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
10
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
11
 import com.xxl.job.core.biz.ExecutorBiz;
11
 import com.xxl.job.core.biz.ExecutorBiz;
12
 import com.xxl.job.core.biz.model.ReturnT;
12
 import com.xxl.job.core.biz.model.ReturnT;
87
 		XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
87
 		XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
88
 
88
 
89
 		// monitor triger
89
 		// monitor triger
90
-		JobMonitorHelper.monitor(jobLog.getId());
90
+		JobFailMonitorHelper.monitor(jobLog.getId());
91
 		logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
91
 		logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
92
     }
92
     }
93
 
93
 

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java Datei anzeigen

2
 
2
 
3
 import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
3
 import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
4
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
 import com.xxl.job.admin.core.model.XxlJobInfo;
5
-import com.xxl.job.admin.core.thread.JobMonitorHelper;
5
+import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
6
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
6
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
7
 import com.xxl.job.admin.dao.IXxlJobGroupDao;
7
 import com.xxl.job.admin.dao.IXxlJobGroupDao;
8
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
8
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
43
         JobRegistryMonitorHelper.getInstance().start();
43
         JobRegistryMonitorHelper.getInstance().start();
44
 
44
 
45
         // admin monitor run
45
         // admin monitor run
46
-        JobMonitorHelper.getInstance().start();
46
+        JobFailMonitorHelper.getInstance().start();
47
     }
47
     }
48
     
48
     
49
     // destroy
49
     // destroy
52
         JobRegistryMonitorHelper.getInstance().toStop();
52
         JobRegistryMonitorHelper.getInstance().toStop();
53
 
53
 
54
         // admin monitor stop
54
         // admin monitor stop
55
-        JobMonitorHelper.getInstance().toStop();
55
+        JobFailMonitorHelper.getInstance().toStop();
56
 
56
 
57
         serverFactory.destroy();
57
         serverFactory.destroy();
58
     }
58
     }

xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java → xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java Datei anzeigen

1
-package com.xxl.job.admin.core.thread;
2
-
3
-import com.xxl.job.admin.core.model.XxlJobGroup;
4
-import com.xxl.job.admin.core.model.XxlJobInfo;
5
-import com.xxl.job.admin.core.model.XxlJobLog;
6
-import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
7
-import com.xxl.job.admin.core.util.MailUtil;
8
-import com.xxl.job.core.biz.model.ReturnT;
9
-import org.slf4j.Logger;
10
-import org.slf4j.LoggerFactory;
11
-
12
-import java.text.MessageFormat;
13
-import java.util.Arrays;
14
-import java.util.HashSet;
15
-import java.util.Set;
16
-import java.util.concurrent.*;
17
-
18
-/**
19
- * job monitor instance
20
- * @author xuxueli 2015-9-1 18:05:56
21
- */
22
-public class JobMonitorHelper {
23
-	private static Logger logger = LoggerFactory.getLogger(JobMonitorHelper.class);
24
-	
25
-	private static JobMonitorHelper instance = new JobMonitorHelper();
26
-	public static JobMonitorHelper getInstance(){
27
-		return instance;
28
-	}
29
-
30
-	private LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>(0xfff8);
31
-
32
-	private Thread monitorThread;
33
-	private boolean toStop = false;
34
-	public void start(){
35
-		monitorThread = new Thread(new Runnable() {
36
-
37
-			@Override
38
-			public void run() {
39
-				while (!toStop) {
40
-					try {
41
-						logger.debug(">>>>>>>>>>> job monitor beat ... ");
42
-						Integer jobLogId = JobMonitorHelper.instance.queue.take();
43
-						if (jobLogId != null && jobLogId > 0) {
44
-							logger.debug(">>>>>>>>>>> job monitor heat success, JobLogId:{}", jobLogId);
45
-							XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId);
46
-							if (log!=null) {
47
-								if (ReturnT.SUCCESS_CODE==log.getTriggerCode() && log.getHandleCode()==0) {
48
-									// running
49
-									try {
50
-										TimeUnit.SECONDS.sleep(10);
51
-									} catch (InterruptedException e) {
52
-										e.printStackTrace();
53
-									}
54
-									JobMonitorHelper.monitor(jobLogId);
55
-								}
56
-								if (ReturnT.SUCCESS_CODE==log.getTriggerCode() && ReturnT.SUCCESS_CODE==log.getHandleCode()) {
57
-									// pass
58
-								}
59
-								if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
60
-									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
61
-									if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
62
-
63
-										Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
64
-										for (String email: emailSet) {
65
-											String title = "《调度监控报警》(任务调度中心XXL-JOB)";
66
-											XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(Integer.valueOf(info.getJobGroup()));
67
-											String content = MessageFormat.format("任务调度失败, 执行器名称:{0}, 任务描述:{1}.", group!=null?group.getTitle():"null", info.getJobDesc());
68
-											MailUtil.sendMail(email, title, content, false, null);
69
-										}
70
-									}
71
-								}
72
-							}
73
-						}
74
-					} catch (Exception e) {
75
-						logger.error("job monitor error:{}", e);
76
-					}
77
-				}
78
-			}
79
-		});
80
-		monitorThread.setDaemon(true);
81
-		monitorThread.start();
82
-	}
83
-
84
-	public void toStop(){
85
-		toStop = true;
86
-		//monitorThread.interrupt();
87
-	}
88
-	
89
-	// producer
90
-	public static void monitor(int jobLogId){
91
-		getInstance().queue.offer(jobLogId);
92
-	}
93
-	
94
-}
1
+package com.xxl.job.admin.core.thread;
2
+
3
+import com.xxl.job.admin.core.model.XxlJobGroup;
4
+import com.xxl.job.admin.core.model.XxlJobInfo;
5
+import com.xxl.job.admin.core.model.XxlJobLog;
6
+import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
7
+import com.xxl.job.admin.core.util.MailUtil;
8
+import com.xxl.job.core.biz.model.ReturnT;
9
+import org.slf4j.Logger;
10
+import org.slf4j.LoggerFactory;
11
+
12
+import java.text.MessageFormat;
13
+import java.util.Arrays;
14
+import java.util.HashSet;
15
+import java.util.Set;
16
+import java.util.concurrent.*;
17
+
18
+/**
19
+ * job monitor instance
20
+ * @author xuxueli 2015-9-1 18:05:56
21
+ */
22
+public class JobFailMonitorHelper {
23
+	private static Logger logger = LoggerFactory.getLogger(JobFailMonitorHelper.class);
24
+	
25
+	private static JobFailMonitorHelper instance = new JobFailMonitorHelper();
26
+	public static JobFailMonitorHelper getInstance(){
27
+		return instance;
28
+	}
29
+
30
+	private LinkedBlockingQueue<Integer> queue = new LinkedBlockingQueue<Integer>(0xfff8);
31
+
32
+	private Thread monitorThread;
33
+	private boolean toStop = false;
34
+	public void start(){
35
+		monitorThread = new Thread(new Runnable() {
36
+
37
+			@Override
38
+			public void run() {
39
+				while (!toStop) {
40
+					try {
41
+						logger.debug(">>>>>>>>>>> job monitor beat ... ");
42
+						Integer jobLogId = JobFailMonitorHelper.instance.queue.take();
43
+						if (jobLogId != null && jobLogId > 0) {
44
+							logger.debug(">>>>>>>>>>> job monitor heat success, JobLogId:{}", jobLogId);
45
+							XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId);
46
+							if (log!=null) {
47
+								if (ReturnT.SUCCESS_CODE==log.getTriggerCode() && log.getHandleCode()==0) {
48
+									// running
49
+									try {
50
+										TimeUnit.SECONDS.sleep(10);
51
+									} catch (InterruptedException e) {
52
+										e.printStackTrace();
53
+									}
54
+									JobFailMonitorHelper.monitor(jobLogId);
55
+								}
56
+								if (ReturnT.SUCCESS_CODE==log.getTriggerCode() && ReturnT.SUCCESS_CODE==log.getHandleCode()) {
57
+									// pass
58
+								}
59
+								if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
60
+									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
61
+									if (info!=null && info.getAlarmEmail()!=null && info.getAlarmEmail().trim().length()>0) {
62
+
63
+										Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
64
+										for (String email: emailSet) {
65
+											String title = "《调度监控报警》(任务调度中心XXL-JOB)";
66
+											XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(Integer.valueOf(info.getJobGroup()));
67
+											String content = MessageFormat.format("任务调度失败, 执行器名称:{0}, 任务描述:{1}.", group!=null?group.getTitle():"null", info.getJobDesc());
68
+											MailUtil.sendMail(email, title, content, false, null);
69
+										}
70
+									}
71
+								}
72
+							}
73
+						}
74
+					} catch (Exception e) {
75
+						logger.error("job monitor error:{}", e);
76
+					}
77
+				}
78
+			}
79
+		});
80
+		monitorThread.setDaemon(true);
81
+		monitorThread.start();
82
+	}
83
+
84
+	public void toStop(){
85
+		toStop = true;
86
+		//monitorThread.interrupt();
87
+	}
88
+	
89
+	// producer
90
+	public static void monitor(int jobLogId){
91
+		getInstance().queue.offer(jobLogId);
92
+	}
93
+	
94
+}

+ 0 - 16
xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/GlueLoader.java Datei anzeigen

1
-//package com.xxl.job.core.glue.loader;
2
-//
3
-///**
4
-// * code source loader
5
-// * @author xuxueli 2016-1-2 20:01:39
6
-// */
7
-//public interface GlueLoader {
8
-//
9
-//	/**
10
-//	 * load code source by name, ensure every load is the latest.
11
-//	 * @param jobId
12
-//	 * @return code source
13
-//	 */
14
-//	public String load(int jobId);
15
-//
16
-//}

+ 0 - 30
xxl-job-core/src/main/java/com/xxl/job/core/glue/loader/impl/DbGlueLoader.java Datei anzeigen

1
-//package com.xxl.job.core.glue.loader.impl;
2
-//
3
-//import com.xxl.job.core.glue.loader.GlueLoader;
4
-//import com.xxl.job.core.util.DBUtil;
5
-//
6
-//import javax.sql.DataSource;
7
-//import java.util.List;
8
-//import java.util.Map;
9
-//
10
-///**
11
-// * Created by xuxueli on 16/9/30.
12
-// */
13
-//public class DbGlueLoader implements GlueLoader {
14
-//
15
-//    private DataSource dataSource;
16
-//    public void setDataSource(DataSource dataSource) {
17
-//        this.dataSource = dataSource;
18
-//    }
19
-//
20
-//    @Override
21
-//    public String load(int jobId) {
22
-//        String sql = "SELECT glue_source FROM XXL_JOB_QRTZ_TRIGGER_INFO WHERE id = ?";
23
-//        List<Map<String, Object>> result = DBUtil.query(dataSource, sql, new Object[]{jobId});
24
-//        if (result!=null && result.size()==1 && result.get(0)!=null && result.get(0).get("glue_source")!=null ) {
25
-//            return (String) result.get(0).get("glue_source");
26
-//        }
27
-//        return null;
28
-//    }
29
-//
30
-//}

+ 6 - 1
xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobLogger.java Datei anzeigen

20
      */
20
      */
21
     public static void log(String appendLog) {
21
     public static void log(String appendLog) {
22
 
22
 
23
+        // logFileName
24
+        String logFileName = XxlJobFileAppender.contextHolder.get();
25
+        if (logFileName==null || logFileName.trim().length()==0) {
26
+            return;
27
+        }
28
+
23
         // "yyyy-MM-dd HH:mm:ss [ClassName]-[MethodName]-[LineNumber]-[ThreadName] log";
29
         // "yyyy-MM-dd HH:mm:ss [ClassName]-[MethodName]-[LineNumber]-[ThreadName] log";
24
         StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
30
         StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
25
         StackTraceElement callInfo = stackTraceElements[1];
31
         StackTraceElement callInfo = stackTraceElements[1];
34
         String formatAppendLog = stringBuffer.toString();
40
         String formatAppendLog = stringBuffer.toString();
35
 
41
 
36
         // appendlog
42
         // appendlog
37
-        String logFileName = XxlJobFileAppender.contextHolder.get();
38
         XxlJobFileAppender.appendLog(logFileName, formatAppendLog);
43
         XxlJobFileAppender.appendLog(logFileName, formatAppendLog);
39
 
44
 
40
         logger.warn("[{}]: {}", logFileName, formatAppendLog);
45
         logger.warn("[{}]: {}", logFileName, formatAppendLog);

+ 8 - 6
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java Datei anzeigen

106
 						String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
106
 						String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
107
 
107
 
108
 						XxlJobFileAppender.contextHolder.set(logFileName);
108
 						XxlJobFileAppender.contextHolder.set(logFileName);
109
-						XxlJobLogger.log("----------- xxl-job job execute start -----------");
109
+						XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + handlerParams);
110
 
110
 
111
 						executeResult = handler.execute(handlerParams);
111
 						executeResult = handler.execute(handlerParams);
112
 						if (executeResult == null) {
112
 						if (executeResult == null) {
113
 							executeResult = ReturnT.FAIL;
113
 							executeResult = ReturnT.FAIL;
114
 						}
114
 						}
115
+
116
+						XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
115
 					} catch (Exception e) {
117
 					} catch (Exception e) {
116
 						if (toStop) {
118
 						if (toStop) {
117
-							XxlJobLogger.log("<br>----------- xxl-job toStop, stopReason:" + stopReason);
119
+							XxlJobLogger.log("<br>----------- JobThread toStop, stopReason:" + stopReason);
118
 						}
120
 						}
119
 
121
 
120
 						StringWriter stringWriter = new StringWriter();
122
 						StringWriter stringWriter = new StringWriter();
121
 						e.printStackTrace(new PrintWriter(stringWriter));
123
 						e.printStackTrace(new PrintWriter(stringWriter));
122
 						String errorMsg = stringWriter.toString();
124
 						String errorMsg = stringWriter.toString();
123
-						XxlJobLogger.log("JobThread Exception:" + errorMsg);
125
+						executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
124
 
126
 
125
-						executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, stringWriter.toString());
127
+						XxlJobLogger.log("<br>----------- JobThread Exception:" + errorMsg + "<br>----------- xxl-job job execute end(error) -----------");
126
 					}
128
 					}
127
 
129
 
128
-					XxlJobLogger.log("----------- xxl-job job execute end ----------- <br> " +
129
-									"Look : ExecutorParams:"+ handlerParams +", Code:"+ executeResult.getCode() +", Msg:" + executeResult.getMsg());
130
+
131
+
130
 					
132
 					
131
 					// callback handler info
133
 					// callback handler info
132
 					if (!toStop) {
134
 					if (!toStop) {