瀏覽代碼

Merge pull request #219 from xhanthow/local-job

许雪里 7 年之前
父節點
當前提交
dd2de9d8f7
沒有帳戶連結到提交者的電子郵件
共有 1 個文件被更改,包括 90 次插入82 次删除
  1. 90 82
      xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java

+ 90 - 82
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java 查看文件

@@ -91,86 +91,94 @@ public class JobThread extends Thread{
91 91
 
92 92
     @Override
93 93
 	public void run() {
94
-		while(!toStop){
95
-			running = false;
96
-			idleTimes++;
97
-			try {
98
-				// to check toStop signal, we need cycle, so wo cannot use queue.take(), instand of poll(timeout)
99
-				TriggerParam triggerParam = triggerQueue.poll(3L, TimeUnit.SECONDS);
100
-				if (triggerParam!=null) {
101
-					running = true;
102
-					idleTimes = 0;
103
-					triggerLogIdSet.remove(triggerParam.getLogId());
104
-					
105
-					// parse param
106
-					String[] handlerParams = (triggerParam.getExecutorParams()!=null && triggerParam.getExecutorParams().trim().length()>0)
107
-							? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(",")).toArray()) : null;
108
-					
109
-					// handle job
110
-					ReturnT<String> executeResult = null;
111
-					try {
112
-						// log filename: yyyy-MM-dd/9999.log
113
-						String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
114
-
115
-						XxlJobFileAppender.contextHolder.set(logFileName);
116
-						ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
117
-						XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + Arrays.toString(handlerParams));
118
-
119
-						executeResult = handler.execute(handlerParams);
120
-						if (executeResult == null) {
121
-							executeResult = ReturnT.FAIL;
122
-						}
123
-
124
-						XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
125
-					} catch (Exception e) {
126
-						if (toStop) {
127
-							XxlJobLogger.log("<br>----------- JobThread toStop, stopReason:" + stopReason);
128
-						}
129
-
130
-						StringWriter stringWriter = new StringWriter();
131
-						e.printStackTrace(new PrintWriter(stringWriter));
132
-						String errorMsg = stringWriter.toString();
133
-						executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
134
-
135
-						XxlJobLogger.log("<br>----------- JobThread Exception:" + errorMsg + "<br>----------- xxl-job job execute end(error) -----------");
136
-					}
137
-					
138
-					// callback handler info
139
-					if (!toStop) {
140
-						// commonm
141
-						TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), executeResult));
142
-					} else {
143
-						// is killed
144
-						ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [业务运行中,被强制终止]");
145
-						TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
146
-					}
147
-				} else {
148
-					if (idleTimes > 30) {
149
-						XxlJobExecutor.removeJobThread(jobId, "excutor idel times over limit.");
150
-					}
151
-				}
152
-			} catch (Throwable e) {
153
-				if (toStop) {
154
-					XxlJobLogger.log("<br>----------- xxl-job toStop, stopReason:" + stopReason);
155
-				}
156
-
157
-				StringWriter stringWriter = new StringWriter();
158
-				e.printStackTrace(new PrintWriter(stringWriter));
159
-				String errorMsg = stringWriter.toString();
160
-				XxlJobLogger.log("----------- xxl-job JobThread Exception:" + errorMsg);
161
-			}
162
-		}
163
-		
164
-		// callback trigger request in queue
165
-		while(triggerQueue !=null && triggerQueue.size()>0){
166
-			TriggerParam triggerParam = triggerQueue.poll();
167
-			if (triggerParam!=null) {
168
-				// is killed
169
-				ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [任务尚未执行,在调度队列中被终止]");
170
-				TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
171
-			}
172
-		}
173
-		
174
-		logger.info(">>>>>>>>>>> xxl-job JobThread stoped, hashCode:{}", Thread.currentThread());
175
-	}
94
+
95
+        while(!toStop){
96
+            running = false;
97
+            idleTimes++;
98
+            // handle job
99
+            ReturnT<String> executeResult = null;
100
+            TriggerParam triggerParam = null;
101
+            try {
102
+                // to check toStop signal, we need cycle, so wo cannot use queue.take(), instand of poll(timeout)
103
+                triggerParam = triggerQueue.poll(3L, TimeUnit.SECONDS);
104
+                if (triggerParam!=null) {
105
+                    running = true;
106
+                    idleTimes = 0;
107
+                    triggerLogIdSet.remove(triggerParam.getLogId());
108
+
109
+                    // parse param
110
+                    String[] handlerParams = (triggerParam.getExecutorParams()!=null && triggerParam.getExecutorParams().trim().length()>0)
111
+                        ? (String[])(Arrays.asList(triggerParam.getExecutorParams().split(" ")).toArray()) : null;
112
+
113
+
114
+                    try {
115
+                        // log filename: yyyy-MM-dd/9999.log
116
+                        String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
117
+
118
+                        XxlJobFileAppender.contextHolder.set(logFileName);
119
+                        ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
120
+                        XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + Arrays.toString(handlerParams));
121
+
122
+                        executeResult = handler.execute(handlerParams);
123
+                        if (executeResult == null) {
124
+                            executeResult = ReturnT.FAIL;
125
+                        }
126
+
127
+                        XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
128
+                    } catch (Exception e) {
129
+                        if (toStop) {
130
+                            XxlJobLogger.log("<br>----------- JobThread toStop, stopReason:" + stopReason);
131
+                        }
132
+
133
+                        StringWriter stringWriter = new StringWriter();
134
+                        e.printStackTrace(new PrintWriter(stringWriter));
135
+                        String errorMsg = stringWriter.toString();
136
+                        executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
137
+
138
+                        XxlJobLogger.log("<br>----------- JobThread Exception:" + errorMsg + "<br>----------- xxl-job job execute end(error) -----------");
139
+                    }
140
+
141
+                } else {
142
+                    if (idleTimes > 30) {
143
+                        XxlJobExecutor.removeJobThread(jobId, "excutor idel times over limit.");
144
+                    }
145
+                }
146
+            } catch (Throwable e) {
147
+                if (toStop) {
148
+                    XxlJobLogger.log("<br>----------- xxl-job toStop, stopReason:" + stopReason);
149
+                }
150
+
151
+                StringWriter stringWriter = new StringWriter();
152
+                e.printStackTrace(new PrintWriter(stringWriter));
153
+                String errorMsg = stringWriter.toString();
154
+                executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
155
+
156
+                XxlJobLogger.log("----------- xxl-job JobThread Exception:" + errorMsg);
157
+            } finally {
158
+                if(triggerParam != null) {
159
+                    // callback handler info
160
+                    if (!toStop) {
161
+                        // commonm
162
+                        TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), executeResult));
163
+                    } else {
164
+                        // is killed
165
+                        ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [业务运行中,被强制终止]");
166
+                        TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
167
+                    }
168
+                }
169
+            }
170
+        }
171
+
172
+        // callback trigger request in queue
173
+        while(triggerQueue !=null && triggerQueue.size()>0){
174
+            TriggerParam triggerParam = triggerQueue.poll();
175
+            if (triggerParam!=null) {
176
+                // is killed
177
+                ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [任务尚未执行,在调度队列中被终止]");
178
+                TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
179
+            }
180
+        }
181
+
182
+        logger.info(">>>>>>>>>>>> xxl-job JobThread stoped, hashCode:{}", Thread.currentThread());
183
+    }
176 184
 }