Преглед изворни кода

任务触发组件优化,常规1s预加载一次,预加载轮空时主动休眠4s,降低加载频率以及对DB压力;

xuxueli пре 6 година
родитељ
комит
c00a2995c8

+ 1 - 1
doc/XXL-JOB官方文档.md Прегледај датотеку

1517
 - 6、登录界面取消默认填写的登录账号密码;
1517
 - 6、登录界面取消默认填写的登录账号密码;
1518
 - 7、[ING]cron在线生成工具;
1518
 - 7、[ING]cron在线生成工具;
1519
 - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知;
1519
 - 8、[ING]任务、执行器数据全量本地缓存;新增消息表广播通知;
1520
-- 9、[ING]任务触发组件优化,常规1s预加载一次,轮空时主动休眠4s;
1520
+- 9、任务触发组件优化,常规1s预加载一次,预加载轮空时主动休眠4s,降低加载频率以及对DB压力
1521
 - 10、注册监控线程优化,降低死锁几率;
1521
 - 10、注册监控线程优化,降低死锁几率;
1522
 - 11、调度组件优化:针对永远不会触发的Cron禁止配置和启动;任务Cron最后一次触发后再也不会触发时,比如一次性任务,主动停止相关任务;
1522
 - 11、调度组件优化:针对永远不会触发的Cron禁止配置和启动;任务Cron最后一次触发后再也不会触发时,比如一次性任务,主动停止相关任务;
1523
 - 12、任务列表交互优化,支持查看任务所属执行器的注册节点;
1523
 - 12、任务列表交互优化,支持查看任务所属执行器的注册节点;

+ 15 - 9
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java Прегледај датотеку

52
                 Connection conn = null;
52
                 Connection conn = null;
53
                 while (!scheduleThreadToStop) {
53
                 while (!scheduleThreadToStop) {
54
 
54
 
55
-                    // 扫描任务
55
+                    // Scan Job
56
                     long start = System.currentTimeMillis();
56
                     long start = System.currentTimeMillis();
57
                     PreparedStatement preparedStatement = null;
57
                     PreparedStatement preparedStatement = null;
58
+                    boolean preReadSuc = true;
58
                     try {
59
                     try {
59
                         if (conn==null || conn.isClosed()) {
60
                         if (conn==null || conn.isClosed()) {
60
                             conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
61
                             conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
154
                                 XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
155
                                 XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
155
                             }
156
                             }
156
 
157
 
158
+                        } else {
159
+                            preReadSuc = false;
157
                         }
160
                         }
158
 
161
 
159
                         // tx stop
162
                         // tx stop
187
                     }
190
                     }
188
                     long cost = System.currentTimeMillis()-start;
191
                     long cost = System.currentTimeMillis()-start;
189
 
192
 
190
-                    // next second, align second
191
-                    try {
192
-                        if (cost < 1000) {
193
-                            TimeUnit.MILLISECONDS.sleep(1000 - System.currentTimeMillis()%1000);
194
-                        }
195
-                    } catch (InterruptedException e) {
196
-                        if (!scheduleThreadToStop) {
197
-                            logger.error(e.getMessage(), e);
193
+
194
+                    // Wait seconds, align second
195
+                    if (cost < 1000) {  // scan-overtime, not wait
196
+                        try {
197
+                            // pre-read success, exist job in 5s, wait 1s;
198
+                            // pre-read fail, no exist job in 5s, wait 1s
199
+                            TimeUnit.MILLISECONDS.sleep((preReadSuc?1000:4000) - System.currentTimeMillis()%1000);
200
+                        } catch (InterruptedException e) {
201
+                            if (!scheduleThreadToStop) {
202
+                                logger.error(e.getMessage(), e);
203
+                            }
198
                         }
204
                         }
199
                     }
205
                     }
200
 
206