Bladeren bron

底层优化

xueli.xue 8 jaren geleden
bovenliggende
commit
7b3d53fa1c

+ 1 - 1
README.md Bestand weergeven

@@ -857,6 +857,6 @@ XXL-JOB托管在Github上,如有问题可在 [ISSUES](https://github.com/xuxue
857 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 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 Bestand weergeven

@@ -20,7 +20,7 @@ package com.xxl.job.admin.core.jobbean;
20 20
 //import com.xxl.job.client.util.JacksonUtil;
21 21
 //import com.xxl.job.core.model.XxlJobInfo;
22 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 24
 //import com.xxl.job.core.util.DynamicSchedulerUtil;
25 25
 //
26 26
 ///**
@@ -84,7 +84,7 @@ package com.xxl.job.admin.core.jobbean;
84 84
 //		// update trigger info
85 85
 //		DynamicSchedulerUtil.xxlJobLogDao.updateTriggerInfo(jobLog);
86 86
 //		DynamicSchedulerUtil.xxlJobLogDao.updateHandleInfo(jobLog);
87
-//		JobMonitorHelper.monitor(jobLog.getId());
87
+//		JobFailMonitorHelper.monitor(jobLog.getId());
88 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 Bestand weergeven

@@ -6,7 +6,7 @@ import com.xxl.job.admin.core.model.XxlJobInfo;
6 6
 import com.xxl.job.admin.core.model.XxlJobLog;
7 7
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
8 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 10
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
11 11
 import com.xxl.job.core.biz.ExecutorBiz;
12 12
 import com.xxl.job.core.biz.model.ReturnT;
@@ -87,7 +87,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
87 87
 		XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
88 88
 
89 89
 		// monitor triger
90
-		JobMonitorHelper.monitor(jobLog.getId());
90
+		JobFailMonitorHelper.monitor(jobLog.getId());
91 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 Bestand weergeven

@@ -2,7 +2,7 @@ package com.xxl.job.admin.core.schedule;
2 2
 
3 3
 import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
4 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 6
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
7 7
 import com.xxl.job.admin.dao.IXxlJobGroupDao;
8 8
 import com.xxl.job.admin.dao.IXxlJobInfoDao;
@@ -43,7 +43,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
43 43
         JobRegistryMonitorHelper.getInstance().start();
44 44
 
45 45
         // admin monitor run
46
-        JobMonitorHelper.getInstance().start();
46
+        JobFailMonitorHelper.getInstance().start();
47 47
     }
48 48
     
49 49
     // destroy
@@ -52,7 +52,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
52 52
         JobRegistryMonitorHelper.getInstance().toStop();
53 53
 
54 54
         // admin monitor stop
55
-        JobMonitorHelper.getInstance().toStop();
55
+        JobFailMonitorHelper.getInstance().toStop();
56 56
 
57 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 Bestand weergeven

@@ -1,94 +1,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 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 Bestand weergeven

@@ -1,16 +0,0 @@
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 Bestand weergeven

@@ -1,30 +0,0 @@
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 Bestand weergeven

@@ -20,6 +20,12 @@ public class XxlJobLogger {
20 20
      */
21 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 29
         // "yyyy-MM-dd HH:mm:ss [ClassName]-[MethodName]-[LineNumber]-[ThreadName] log";
24 30
         StackTraceElement[] stackTraceElements = new Throwable().getStackTrace();
25 31
         StackTraceElement callInfo = stackTraceElements[1];
@@ -34,7 +40,6 @@ public class XxlJobLogger {
34 40
         String formatAppendLog = stringBuffer.toString();
35 41
 
36 42
         // appendlog
37
-        String logFileName = XxlJobFileAppender.contextHolder.get();
38 43
         XxlJobFileAppender.appendLog(logFileName, formatAppendLog);
39 44
 
40 45
         logger.warn("[{}]: {}", logFileName, formatAppendLog);

+ 8 - 6
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java Bestand weergeven

@@ -106,27 +106,29 @@ public class JobThread extends Thread{
106 106
 						String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
107 107
 
108 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 111
 						executeResult = handler.execute(handlerParams);
112 112
 						if (executeResult == null) {
113 113
 							executeResult = ReturnT.FAIL;
114 114
 						}
115
+
116
+						XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
115 117
 					} catch (Exception e) {
116 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 122
 						StringWriter stringWriter = new StringWriter();
121 123
 						e.printStackTrace(new PrintWriter(stringWriter));
122 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 133
 					// callback handler info
132 134
 					if (!toStop) {