|
@@ -56,29 +56,23 @@ public class JobScheduleHelper {
|
56
|
56
|
public void start() {
|
57
|
57
|
|
58
|
58
|
// schedule thread
|
59
|
|
- scheduleThread = new Thread(new Runnable() {
|
60
|
|
- @Override
|
61
|
|
- public void run() {
|
62
|
|
- jobScheduleStop();
|
63
|
|
- }
|
64
|
|
- });
|
|
59
|
+ scheduleThread = new Thread(this::jobSchedule);
|
65
|
60
|
scheduleThread.setDaemon(true);
|
66
|
61
|
scheduleThread.setName("xxl-job, admin JobScheduleHelper#scheduleThread");
|
67
|
62
|
scheduleThread.start();
|
68
|
63
|
|
69
|
64
|
// ring thread
|
70
|
|
- ringThread = new Thread(new Runnable() {
|
71
|
|
- @Override
|
72
|
|
- public void run() {
|
73
|
|
- jobScheduleRing();
|
74
|
|
- }
|
75
|
|
- });
|
|
65
|
+ ringThread = new Thread(this::jobScheduleRing);
|
76
|
66
|
ringThread.setDaemon(true);
|
77
|
67
|
ringThread.setName("xxl-job, admin JobScheduleHelper#ringThread");
|
78
|
68
|
ringThread.start();
|
79
|
69
|
}
|
80
|
70
|
|
81
|
|
- private void jobScheduleStop() {
|
|
71
|
+ /**
|
|
72
|
+ * 不断去数据库获取任务
|
|
73
|
+ */
|
|
74
|
+ @SuppressWarnings("AlibabaMethodTooLong")
|
|
75
|
+ private void jobSchedule() {
|
82
|
76
|
|
83
|
77
|
try {
|
84
|
78
|
TimeUnit.MILLISECONDS.sleep(5000 - System.currentTimeMillis() % 1000);
|
|
@@ -122,13 +116,15 @@ public class JobScheduleHelper {
|
122
|
116
|
|
123
|
117
|
// time-ring jump
|
124
|
118
|
if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {
|
|
119
|
+ // 过期了
|
125
|
120
|
// 2.1、trigger-expire > 5s:pass && make next-trigger-time
|
126
|
121
|
logger.warn(">>>>>>>>>>> xxl-job, schedule misfire, jobId = " + jobInfo.getId());
|
127
|
122
|
|
128
|
|
- // fresh next
|
|
123
|
+ // fresh next 刷新
|
129
|
124
|
refreshNextValidTime(jobInfo, new Date());
|
130
|
125
|
|
131
|
126
|
} else if (nowTime > jobInfo.getTriggerNextTime()) {
|
|
127
|
+ // 可以执行
|
132
|
128
|
// 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time
|
133
|
129
|
|
134
|
130
|
// 1、trigger
|
|
@@ -151,7 +147,6 @@ public class JobScheduleHelper {
|
151
|
147
|
refreshNextValidTime(jobInfo, new Date(jobInfo.getTriggerNextTime()));
|
152
|
148
|
|
153
|
149
|
}
|
154
|
|
-
|
155
|
150
|
} else {
|
156
|
151
|
// 2.3、trigger-pre-read:time-ring trigger && make next-trigger-time
|
157
|
152
|
|
|
@@ -179,7 +174,6 @@ public class JobScheduleHelper {
|
179
|
174
|
|
180
|
175
|
// tx stop
|
181
|
176
|
|
182
|
|
-
|
183
|
177
|
} catch (Exception e) {
|
184
|
178
|
if (!scheduleThreadToStop) {
|
185
|
179
|
logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}", e.getMessage());
|
|
@@ -226,7 +220,8 @@ public class JobScheduleHelper {
|
226
|
220
|
|
227
|
221
|
|
228
|
222
|
// Wait seconds, align second
|
229
|
|
- if (cost < 1000) { // scan-overtime, not wait
|
|
223
|
+ if (cost < 1000) {
|
|
224
|
+ // scan-overtime, not wait
|
230
|
225
|
try {
|
231
|
226
|
// pre-read period: success > scan each second; fail > skip this period;
|
232
|
227
|
TimeUnit.MILLISECONDS.sleep((preReadSuc ? 1000 : PRE_READ_MS) - System.currentTimeMillis() % 1000);
|
|
@@ -236,9 +231,7 @@ public class JobScheduleHelper {
|
236
|
231
|
}
|
237
|
232
|
}
|
238
|
233
|
}
|
239
|
|
-
|
240
|
234
|
}
|
241
|
|
-
|
242
|
235
|
logger.info(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread stop");
|
243
|
236
|
}
|
244
|
237
|
|
|
@@ -258,7 +251,8 @@ public class JobScheduleHelper {
|
258
|
251
|
try {
|
259
|
252
|
// second data
|
260
|
253
|
List<Integer> ringItemData = new ArrayList<>();
|
261
|
|
- int nowSecond = Calendar.getInstance().get(Calendar.SECOND); // 避免处理耗时太长,跨过刻度,向前校验一个刻度;
|
|
254
|
+ // 避免处理耗时太长,跨过刻度,向前校验一个刻度;
|
|
255
|
+ int nowSecond = Calendar.getInstance().get(Calendar.SECOND);
|
262
|
256
|
for (int i = 0; i < 2; i++) {
|
263
|
257
|
List<Integer> tmpData = ringData.remove((nowSecond + 60 - i) % 60);
|
264
|
258
|
if (tmpData != null) {
|
|
@@ -267,7 +261,7 @@ public class JobScheduleHelper {
|
267
|
261
|
}
|
268
|
262
|
|
269
|
263
|
// ring trigger
|
270
|
|
- logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData));
|
|
264
|
+ logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : {} = {}", nowSecond, ringItemData);
|
271
|
265
|
if (ringItemData.size() > 0) {
|
272
|
266
|
// do trigger
|
273
|
267
|
for (int jobId : ringItemData) {
|