Przeglądaj źródła

任务线程Error异常逻辑逻辑优化

xuxueli 7 lat temu
rodzic
commit
449691d322

+ 58 - 72
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java Wyświetl plik

@@ -92,69 +92,55 @@ public class JobThread extends Thread{
92 92
     @Override
93 93
 	public void run() {
94 94
 
95
-        while(!toStop){
96
-            running = false;
97
-            idleTimes++;
98
-            // handle job
99
-            ReturnT<String> executeResult = null;
95
+		while(!toStop){
96
+			running = false;
97
+			idleTimes++;
98
+
100 99
             TriggerParam triggerParam = null;
100
+            ReturnT<String> executeResult = null;
101 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 {
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
+					// log filename: yyyy-MM-dd/9999.log
115
+					String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTim()), triggerParam.getLogId());
116
+					XxlJobFileAppender.contextHolder.set(logFileName);
117
+					ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
118
+
119
+					// execute
120
+					XxlJobLogger.log("<br>----------- xxl-job job execute start -----------<br>----------- Params:" + Arrays.toString(handlerParams));
121
+					executeResult = handler.execute(handlerParams);
122
+					if (executeResult == null) {
123
+						executeResult = ReturnT.FAIL;
124
+					}
125
+					XxlJobLogger.log("<br>----------- xxl-job job execute end(finish) -----------<br>----------- ReturnT:" + executeResult);
126
+
127
+				} else {
128
+					if (idleTimes > 30) {
129
+						XxlJobExecutor.removeJobThread(jobId, "excutor idel times over limit.");
130
+					}
131
+				}
132
+			} catch (Throwable e) {
133
+				if (toStop) {
134
+					XxlJobLogger.log("<br>----------- JobThread toStop, stopReason:" + stopReason);
135
+				}
136
+
137
+				StringWriter stringWriter = new StringWriter();
138
+				e.printStackTrace(new PrintWriter(stringWriter));
139
+				String errorMsg = stringWriter.toString();
140
+				executeResult = new ReturnT<String>(ReturnT.FAIL_CODE, errorMsg);
141
+
142
+				XxlJobLogger.log("<br>----------- xxl-job job execute end(error) -----------<br>----------- ReturnT:" + executeResult);
143
+			} finally {
158 144
                 if(triggerParam != null) {
159 145
                     // callback handler info
160 146
                     if (!toStop) {
@@ -169,16 +155,16 @@ public class JobThread extends Thread{
169 155
             }
170 156
         }
171 157
 
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
-        }
158
+		// callback trigger request in queue
159
+		while(triggerQueue !=null && triggerQueue.size()>0){
160
+			TriggerParam triggerParam = triggerQueue.poll();
161
+			if (triggerParam!=null) {
162
+				// is killed
163
+				ReturnT<String> stopResult = new ReturnT<String>(ReturnT.FAIL_CODE, stopReason + " [任务尚未执行,在调度队列中被终止]");
164
+				TriggerCallbackThread.pushCallBack(new HandleCallbackParam(triggerParam.getLogId(), stopResult));
165
+			}
166
+		}
181 167
 
182
-        logger.info(">>>>>>>>>>>> xxl-job JobThread stoped, hashCode:{}", Thread.currentThread());
183
-    }
168
+		logger.info(">>>>>>>>>>> xxl-job JobThread stoped, hashCode:{}", Thread.currentThread());
169
+	}
184 170
 }