浏览代码

动态日志

kerry 6 年前
父节点
当前提交
c1e803a495

+ 0 - 44
xxl-job-admin/src/main/java/com/xxl/job/admin/config/XxlJobConfiguration.java 查看文件

1
-package com.xxl.job.admin.config;
2
-
3
-/**
4
- * @author VcKerry on 2020/1/6
5
- */
6
-
7
-//@Configuration
8
-public class XxlJobConfiguration {
9
-
10
- /*   @Bean
11
-    public JobTriggerPoolHelper jobTriggerPoolHelper() {
12
-        return new JobTriggerPoolHelper();
13
-    }
14
-
15
-
16
-    @Bean
17
-    public JobFailMonitorHelper jobFailMonitorHelper(JobTriggerPoolHelper jobTriggerPoolHelper) {
18
-        return new JobFailMonitorHelper(jobTriggerPoolHelper);
19
-    }
20
-
21
-
22
-    @Bean
23
-    public JobLogReportHelper jobLogReportHelper() {
24
-        return new JobLogReportHelper();
25
-    }
26
-
27
-    @Bean
28
-    public JobScheduleHelper jobScheduleHelper(JobTriggerPoolHelper jobTriggerPoolHelper) {
29
-        return new JobScheduleHelper(jobTriggerPoolHelper);
30
-    }
31
-*/
32
-
33
-   /* @Bean(destroyMethod = "destroy")
34
-    public XxlJobScheduler xxlJobScheduler(JobRegistryMonitorHelper jobRegistryMonitorHelper,
35
-                                           JobFailMonitorHelper jobFailMonitorHelper,
36
-                                           JobTriggerPoolHelper jobTriggerPoolHelper,
37
-                                           JobLogReportHelper jobLogReportHelper,
38
-                                           JobScheduleHelper jobScheduleHelper) throws Exception {
39
-        XxlJobScheduler xxlJobScheduler = new XxlJobScheduler(jobRegistryMonitorHelper, jobFailMonitorHelper, jobTriggerPoolHelper, jobLogReportHelper, jobScheduleHelper);
40
-        xxlJobScheduler.init();
41
-        return xxlJobScheduler;
42
-    }*/
43
-
44
-}

+ 9 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java 查看文件

135
         return "joblog/joblog.detail";
135
         return "joblog/joblog.detail";
136
     }
136
     }
137
 
137
 
138
+    /**
139
+     * 获取日志
140
+     *
141
+     * @param executorAddress
142
+     * @param triggerTime
143
+     * @param logId
144
+     * @param fromLineNum
145
+     * @return
146
+     */
138
     @RequestMapping("/logDetailCat")
147
     @RequestMapping("/logDetailCat")
139
     @ResponseBody
148
     @ResponseBody
140
     public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum) {
149
     public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum) {

+ 15 - 21
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java 查看文件

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

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java 查看文件

95
         // choose thread pool
95
         // choose thread pool
96
         ThreadPoolExecutor triggerPool_ = fastTriggerPool;
96
         ThreadPoolExecutor triggerPool_ = fastTriggerPool;
97
         AtomicInteger jobTimeoutCount = jobTimeoutCountMap.get(jobId);
97
         AtomicInteger jobTimeoutCount = jobTimeoutCountMap.get(jobId);
98
-        if (jobTimeoutCount != null && jobTimeoutCount.get() > 10) {      // job-timeout 10 times in 1 min
98
+        // job-timeout 10 times in 1 min
99
+        if (jobTimeoutCount != null && jobTimeoutCount.get() > 10) {
99
             triggerPool_ = slowTriggerPool;
100
             triggerPool_ = slowTriggerPool;
100
         }
101
         }
101
 
102
 

+ 1 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java 查看文件

211
         ReturnT<String> runResult = null;
211
         ReturnT<String> runResult = null;
212
         try {
212
         try {
213
             ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(address);
213
             ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(address);
214
+            // 远程执行
214
             runResult = executorBiz.run(triggerParam);
215
             runResult = executorBiz.run(triggerParam);
215
         } catch (Exception e) {
216
         } catch (Exception e) {
216
             logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e);
217
             logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e);

+ 2 - 2
xxl-job-admin/src/main/resources/application.properties 查看文件

6
 spring.datasource.username=xxl_job
6
 spring.datasource.username=xxl_job
7
 spring.datasource.password=E_wsq@163.com
7
 spring.datasource.password=E_wsq@163.com
8
 spring.datasource.hikari.connection-test-query=SELECT 1
8
 spring.datasource.hikari.connection-test-query=SELECT 1
9
-spring.datasource.hikari.maximum-pool-size=20
10
-spring.datasource.hikari.minimum-idle=10
9
+spring.datasource.hikari.maximum-pool-size=30
10
+spring.datasource.hikari.minimum-idle=20
11
 ### actuator
11
 ### actuator
12
 management.server.servlet.context-path=/actuator
12
 management.server.servlet.context-path=/actuator
13
 management.health.mail.enabled=false
13
 management.health.mail.enabled=false

+ 3 - 0
xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java 查看文件

77
         GlueTypeEnum glueTypeEnum = GlueTypeEnum.match(triggerParam.getGlueType());
77
         GlueTypeEnum glueTypeEnum = GlueTypeEnum.match(triggerParam.getGlueType());
78
         if (GlueTypeEnum.BEAN == glueTypeEnum) {
78
         if (GlueTypeEnum.BEAN == glueTypeEnum) {
79
 
79
 
80
+            // bean 模式
81
+
82
+            // rec
80
             // new jobhandler
83
             // new jobhandler
81
             IJobHandler newJobHandler = XxlJobExecutor.loadJobHandler(triggerParam.getExecutorHandler());
84
             IJobHandler newJobHandler = XxlJobExecutor.loadJobHandler(triggerParam.getExecutorHandler());
82
 
85
 

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

93
         return running || triggerQueue.size() > 0;
93
         return running || triggerQueue.size() > 0;
94
     }
94
     }
95
 
95
 
96
+    /**
97
+     * 取出来
98
+     */
96
     @Override
99
     @Override
97
     public void run() {
100
     public void run() {
98
 
101
 
121
                     // log filename, like "logPath/yyyy-MM-dd/9999.log"
124
                     // log filename, like "logPath/yyyy-MM-dd/9999.log"
122
                     String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTime()), triggerParam.getLogId());
125
                     String logFileName = XxlJobFileAppender.makeLogFileName(new Date(triggerParam.getLogDateTime()), triggerParam.getLogId());
123
                     XxlJobFileAppender.contextHolder.set(logFileName);
126
                     XxlJobFileAppender.contextHolder.set(logFileName);
127
+
124
                     ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
128
                     ShardingUtil.setShardingVo(new ShardingUtil.ShardingVO(triggerParam.getBroadcastIndex(), triggerParam.getBroadcastTotal()));
125
 
129
 
126
                     // execute
130
                     // execute

+ 1 - 1
xxl-job-executor-samples/xxl-job-executor-sample-frameless/src/main/resources/xxl-job-executor.properties 查看文件

1
 ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
1
 ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
2
 
2
 
3
-xxl.job.admin.addresses=http://192.168.10.177:8091/xxl-job-admin,http://192.168.10.177:8090/xxl-job-admin
3
+xxl.job.admin.addresses=http://192.168.10.172:8080/xxl-job-admin
4
 
4
 
5
 ### xxl-job executor address
5
 ### xxl-job executor address
6
 xxl.job.executor.appname=xxl-job-executor-sample
6
 xxl.job.executor.appname=xxl-job-executor-sample