From ec7e9d52ad8704d5cce565096d1c7831b721d52c Mon Sep 17 00:00:00 2001 From: xuxueli <931591021@qq.com> Date: Sun, 19 Oct 2025 02:55:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E5=BA=A6=E4=B8=AD=E5=BF=83=E5=BA=95?= =?UTF-8?q?=E5=B1=82=E7=BB=84=E4=BB=B6=E9=87=8D=E6=9E=84=EF=BC=8C=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=88=9D=E5=A7=8B=E5=8C=96=E4=BB=A5=E5=8F=8A=E9=94=80?= =?UTF-8?q?=E6=AF=81=E9=80=BB=E8=BE=91=E7=BB=9F=E4=B8=80=E5=A4=84=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E8=B5=84=E6=BA=90=E6=B3=84=E6=BC=8F?= =?UTF-8?q?=E9=A3=8E=E9=99=A9=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/XXL-JOB官方文档.md | 13 +- .../controller/biz/JobLogController.java | 6 +- .../controller/openapi/JobApiController.java | 4 +- .../scheduler/alarm/impl/EmailJobAlarm.java | 8 +- .../scheduler/complete/XxlJobCompleter.java | 4 +- .../config/XxlJobAdminBootstrap.java | 118 ++++++++++++++++-- .../route/strategy/ExecutorRouteBusyover.java | 4 +- .../route/strategy/ExecutorRouteFailover.java | 4 +- .../scheduler/scheduler/XxlJobScheduler.java | 103 --------------- .../scheduler/thread/JobCompleteHelper.java | 4 +- .../thread/JobFailMonitorHelper.java | 14 +-- .../scheduler/thread/JobLogReportHelper.java | 14 +-- .../scheduler/thread/JobRegistryHelper.java | 14 +-- .../scheduler/thread/JobScheduleHelper.java | 8 +- .../thread/JobTriggerPoolHelper.java | 4 +- .../scheduler/trigger/XxlJobTrigger.java | 11 +- .../java/com/xxl/job/admin/util/I18nUtil.java | 2 +- 17 files changed, 164 insertions(+), 171 deletions(-) delete mode 100644 xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/scheduler/XxlJobScheduler.java diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md index 3da01c4d..d111d4af 100644 --- a/doc/XXL-JOB官方文档.md +++ b/doc/XXL-JOB官方文档.md @@ -2573,12 +2573,13 @@ public void execute() { - 1、【升级】升级多项maven依赖至较新版本,如 netty、groovy、spring、spring-ai、dify 等; - 2、【修复】合并PR-2369,修复脚本任务参数取值问题; - 3、【优化】报表统计SQL优化,修复小概率情况下查询null值问题; -- 4、【ING】底层组件移除单例写法,汇总factory统一管理; -- 5、【ING】UI框架重构升级,提升交互体验; -- 6、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率; -- 7、【ING】事务SQL下沉至Mapper统一管理,降低维护成本; -- 8、【ING】规范API交互协议,通用响应结构体调整为Response; -- 9、【ING】Http通讯组件升级,基于接口代理方式重构; +- 4、【重构】调度中心底层组件重构,组件初始化以及销毁逻辑统一处理,避免资源泄漏风险; +- 5、【ING】底层组件移除单例写法,汇总factory统一管理; +- 6、【ING】UI框架重构升级,提升交互体验; +- 7、【ING】调整资源加载逻辑,移除不必要的拦截器逻辑,提升页面加载效率; +- 8、【ING】事务SQL下沉至Mapper统一管理,降低维护成本; +- 9、【ING】规范API交互协议,通用响应结构体调整为Response; +- 10、【ING】Http通讯组件升级,基于接口代理方式重构; ### TODO LIST diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java index 7849a93c..598351ff 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/biz/JobLogController.java @@ -7,8 +7,8 @@ import com.xxl.job.admin.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobLog; import com.xxl.job.admin.scheduler.complete.XxlJobCompleter; +import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap; import com.xxl.job.admin.scheduler.exception.XxlJobException; -import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler; import com.xxl.job.admin.util.I18nUtil; import com.xxl.job.admin.util.JobGroupPermissionUtil; import com.xxl.job.core.biz.ExecutorBiz; @@ -169,7 +169,7 @@ public class JobLogController { } // log cat - ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress()); + ExecutorBiz executorBiz = XxlJobAdminBootstrap.getExecutorBiz(jobLog.getExecutorAddress()); ReturnT logResult = executorBiz.log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum)); // is end @@ -243,7 +243,7 @@ public class JobLogController { // request of kill ReturnT runResult = null; try { - ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(log.getExecutorAddress()); + ExecutorBiz executorBiz = XxlJobAdminBootstrap.getExecutorBiz(log.getExecutorAddress()); runResult = executorBiz.kill(new KillParam(jobInfo.getId())); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java index 360f8881..91789328 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/openapi/JobApiController.java @@ -48,8 +48,8 @@ public class JobApiController { if (StringTool.isBlank(uri)) { return ReturnT.ofFail("invalid request, uri-mapping empty."); } - if (StringTool.isNotBlank(XxlJobAdminBootstrap.getAdminConfig().getAccessToken()) - && !XxlJobAdminBootstrap.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) { + if (StringTool.isNotBlank(XxlJobAdminBootstrap.getInstance().getAccessToken()) + && !XxlJobAdminBootstrap.getInstance().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) { return ReturnT.ofFail("The access token is wrong."); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/alarm/impl/EmailJobAlarm.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/alarm/impl/EmailJobAlarm.java index c3d9dbad..86808ed0 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/alarm/impl/EmailJobAlarm.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/alarm/impl/EmailJobAlarm.java @@ -49,7 +49,7 @@ public class EmailJobAlarm implements JobAlarm { } // email info - XxlJobGroup group = XxlJobAdminBootstrap.getAdminConfig().getXxlJobGroupMapper().load(Integer.valueOf(info.getJobGroup())); + XxlJobGroup group = XxlJobAdminBootstrap.getInstance().getXxlJobGroupMapper().load(Integer.valueOf(info.getJobGroup())); String personal = I18nUtil.getString("admin_name_full"); String title = I18nUtil.getString("jobconf_monitor"); String content = MessageFormat.format(loadEmailJobAlarmTemplate(), @@ -63,15 +63,15 @@ public class EmailJobAlarm implements JobAlarm { // make mail try { - MimeMessage mimeMessage = XxlJobAdminBootstrap.getAdminConfig().getMailSender().createMimeMessage(); + MimeMessage mimeMessage = XxlJobAdminBootstrap.getInstance().getMailSender().createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); - helper.setFrom(XxlJobAdminBootstrap.getAdminConfig().getEmailFrom(), personal); + helper.setFrom(XxlJobAdminBootstrap.getInstance().getEmailFrom(), personal); helper.setTo(email); helper.setSubject(title); helper.setText(content, true); - XxlJobAdminBootstrap.getAdminConfig().getMailSender().send(mimeMessage); + XxlJobAdminBootstrap.getInstance().getMailSender().send(mimeMessage); } catch (Exception e) { logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/complete/XxlJobCompleter.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/complete/XxlJobCompleter.java index d33ac547..feba2c33 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/complete/XxlJobCompleter.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/complete/XxlJobCompleter.java @@ -36,7 +36,7 @@ public class XxlJobCompleter { } // fresh handle - return XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().updateHandleInfo(xxlJobLog); + return XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().updateHandleInfo(xxlJobLog); } @@ -48,7 +48,7 @@ public class XxlJobCompleter { // 1、handle success, to trigger child job String triggerChildMsg = null; if (XxlJobContext.HANDLE_CODE_SUCCESS == xxlJobLog.getHandleCode()) { - XxlJobInfo xxlJobInfo = XxlJobAdminBootstrap.getAdminConfig().getXxlJobInfoMapper().loadById(xxlJobLog.getJobId()); + XxlJobInfo xxlJobInfo = XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().loadById(xxlJobLog.getJobId()); if (xxlJobInfo!=null && xxlJobInfo.getChildJobId()!=null && xxlJobInfo.getChildJobId().trim().length()>0) { triggerChildMsg = "

>>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_child_run") +"<<<<<<<<<<<
"; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/config/XxlJobAdminBootstrap.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/config/XxlJobAdminBootstrap.java index a3813f8e..3adc19c2 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/config/XxlJobAdminBootstrap.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/config/XxlJobAdminBootstrap.java @@ -1,9 +1,15 @@ package com.xxl.job.admin.scheduler.config; import com.xxl.job.admin.scheduler.alarm.JobAlarmer; -import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler; import com.xxl.job.admin.mapper.*; +import com.xxl.job.admin.scheduler.thread.*; +import com.xxl.job.admin.util.I18nUtil; +import com.xxl.job.core.biz.ExecutorBiz; +import com.xxl.job.core.biz.client.ExecutorBizClient; +import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; import jakarta.annotation.Resource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; @@ -12,6 +18,8 @@ import org.springframework.stereotype.Component; import javax.sql.DataSource; import java.util.Arrays; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; /** * xxl-job config @@ -21,32 +29,121 @@ import java.util.Arrays; @Component public class XxlJobAdminBootstrap implements InitializingBean, DisposableBean { + private static final Logger logger = LoggerFactory.getLogger(XxlJobAdminBootstrap.class); + + // ---------------------- instance ---------------------- private static XxlJobAdminBootstrap adminConfig = null; - public static XxlJobAdminBootstrap getAdminConfig() { + public static XxlJobAdminBootstrap getInstance() { return adminConfig; } - // ---------------------- XxlJobScheduler ---------------------- - - private XxlJobScheduler xxlJobScheduler; + // ---------------------- start / stop ---------------------- @Override public void afterPropertiesSet() throws Exception { + // init instance adminConfig = this; - xxlJobScheduler = new XxlJobScheduler(); - xxlJobScheduler.init(); + // start + doStart(); } @Override public void destroy() throws Exception { - xxlJobScheduler.destroy(); + // stop + doStop(); + } + + /** + * do start + */ + private void doStart() throws Exception { + // init i18n + initI18n(); + + // admin trigger pool start + JobTriggerPoolHelper.toStart(); + + // admin registry monitor run + JobRegistryHelper.getInstance().start(); + + // admin fail-monitor run + JobFailMonitorHelper.getInstance().start(); + + // admin lose-monitor run ( depend on JobTriggerPoolHelper ) + JobCompleteHelper.getInstance().start(); + + // admin log report start + JobLogReportHelper.getInstance().start(); + + // start-schedule ( depend on JobTriggerPoolHelper ) + JobScheduleHelper.getInstance().start(); + + logger.info(">>>>>>>>> xxl-job admin start success."); + } + + /** + * do stop + */ + private void doStop(){ + // stop-schedule + JobScheduleHelper.getInstance().toStop(); + + // admin log report stop + JobLogReportHelper.getInstance().toStop(); + + // admin lose-monitor stop + JobCompleteHelper.getInstance().toStop(); + + // admin fail-monitor stop + JobFailMonitorHelper.getInstance().toStop(); + + // admin registry stop + JobRegistryHelper.getInstance().toStop(); + + // admin trigger pool stop + JobTriggerPoolHelper.toStop(); + logger.info(">>>>>>>>> xxl-job admin stopped."); + } + + + // ---------------------- I18n ---------------------- + + private void initI18n(){ + for (ExecutorBlockStrategyEnum item : ExecutorBlockStrategyEnum.values()) { + item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name()))); + } + } + + // ---------------------- executor-client ---------------------- + + private static ConcurrentMap executorBizRepository = new ConcurrentHashMap(); + public static ExecutorBiz getExecutorBiz(String address) throws Exception { + // valid + if (address==null || address.trim().length()==0) { + return null; + } + + // load-cache + address = address.trim(); + ExecutorBiz executorBiz = executorBizRepository.get(address); + if (executorBiz != null) { + return executorBiz; + } + + // set-cache + executorBiz = new ExecutorBizClient(address, + XxlJobAdminBootstrap.getInstance().getAccessToken(), + XxlJobAdminBootstrap.getInstance().getTimeout()); + + executorBizRepository.put(address, executorBiz); + return executorBiz; } - // ---------------------- XxlJobScheduler ---------------------- + // ---------------------- field ---------------------- // conf @Value("${xxl.job.i18n}") @@ -70,8 +167,7 @@ public class XxlJobAdminBootstrap implements InitializingBean, DisposableBean { @Value("${xxl.job.logretentiondays}") private int logretentiondays; - // dao, service - + // service, mapper @Resource private XxlJobLogMapper xxlJobLogMapper; @Resource diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java index 471e4fe5..d783c6f5 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteBusyover.java @@ -1,6 +1,6 @@ package com.xxl.job.admin.scheduler.route.strategy; -import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler; +import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap; import com.xxl.job.admin.scheduler.route.ExecutorRouter; import com.xxl.job.admin.util.I18nUtil; import com.xxl.job.core.biz.ExecutorBiz; @@ -22,7 +22,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter { // beat ReturnT idleBeatResult = null; try { - ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address); + ExecutorBiz executorBiz = XxlJobAdminBootstrap.getExecutorBiz(address); idleBeatResult = executorBiz.idleBeat(new IdleBeatParam(triggerParam.getJobId())); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java index 5c626b49..86a9d2a8 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/route/strategy/ExecutorRouteFailover.java @@ -1,6 +1,6 @@ package com.xxl.job.admin.scheduler.route.strategy; -import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler; +import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap; import com.xxl.job.admin.scheduler.route.ExecutorRouter; import com.xxl.job.admin.util.I18nUtil; import com.xxl.job.core.biz.ExecutorBiz; @@ -22,7 +22,7 @@ public class ExecutorRouteFailover extends ExecutorRouter { // beat ReturnT beatResult = null; try { - ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address); + ExecutorBiz executorBiz = XxlJobAdminBootstrap.getExecutorBiz(address); beatResult = executorBiz.beat(); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/scheduler/XxlJobScheduler.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/scheduler/XxlJobScheduler.java deleted file mode 100644 index cb7a2426..00000000 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/scheduler/XxlJobScheduler.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.xxl.job.admin.scheduler.scheduler; - -import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap; -import com.xxl.job.admin.scheduler.thread.*; -import com.xxl.job.admin.util.I18nUtil; -import com.xxl.job.core.biz.ExecutorBiz; -import com.xxl.job.core.biz.client.ExecutorBizClient; -import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -/** - * @author xuxueli 2018-10-28 00:18:17 - */ - -public class XxlJobScheduler { - private static final Logger logger = LoggerFactory.getLogger(XxlJobScheduler.class); - - - public void init() throws Exception { - // init i18n - initI18n(); - - // admin trigger pool start - JobTriggerPoolHelper.toStart(); - - // admin registry monitor run - JobRegistryHelper.getInstance().start(); - - // admin fail-monitor run - JobFailMonitorHelper.getInstance().start(); - - // admin lose-monitor run ( depend on JobTriggerPoolHelper ) - JobCompleteHelper.getInstance().start(); - - // admin log report start - JobLogReportHelper.getInstance().start(); - - // start-schedule ( depend on JobTriggerPoolHelper ) - JobScheduleHelper.getInstance().start(); - - logger.info(">>>>>>>>> init xxl-job admin success."); - } - - - public void destroy() throws Exception { - - // stop-schedule - JobScheduleHelper.getInstance().toStop(); - - // admin log report stop - JobLogReportHelper.getInstance().toStop(); - - // admin lose-monitor stop - JobCompleteHelper.getInstance().toStop(); - - // admin fail-monitor stop - JobFailMonitorHelper.getInstance().toStop(); - - // admin registry stop - JobRegistryHelper.getInstance().toStop(); - - // admin trigger pool stop - JobTriggerPoolHelper.toStop(); - - } - - // ---------------------- I18n ---------------------- - - private void initI18n(){ - for (ExecutorBlockStrategyEnum item:ExecutorBlockStrategyEnum.values()) { - item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name()))); - } - } - - // ---------------------- executor-client ---------------------- - private static ConcurrentMap executorBizRepository = new ConcurrentHashMap(); - public static ExecutorBiz getExecutorBiz(String address) throws Exception { - // valid - if (address==null || address.trim().length()==0) { - return null; - } - - // load-cache - address = address.trim(); - ExecutorBiz executorBiz = executorBizRepository.get(address); - if (executorBiz != null) { - return executorBiz; - } - - // set-cache - executorBiz = new ExecutorBizClient(address, - XxlJobAdminBootstrap.getAdminConfig().getAccessToken(), - XxlJobAdminBootstrap.getAdminConfig().getTimeout()); - - executorBizRepository.put(address, executorBiz); - return executorBiz; - } - -} diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java index c54b42a1..49473b7f 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobCompleteHelper.java @@ -76,7 +76,7 @@ public class JobCompleteHelper { try { // 任务结果丢失处理:调度记录停留在 "运行中" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败; Date losedTime = DateUtil.addMinutes(new Date(), -10); - List losedJobIds = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().findLostJobIds(losedTime); + List losedJobIds = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().findLostJobIds(losedTime); if (losedJobIds!=null && losedJobIds.size()>0) { for (Long logId: losedJobIds) { @@ -153,7 +153,7 @@ public class JobCompleteHelper { private ReturnT callback(HandleCallbackParam handleCallbackParam) { // valid log item - XxlJobLog log = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().load(handleCallbackParam.getLogId()); + XxlJobLog log = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().load(handleCallbackParam.getLogId()); if (log == null) { return ReturnT.ofFail( "log item not found."); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobFailMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobFailMonitorHelper.java index e60384be..c4ce237d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobFailMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobFailMonitorHelper.java @@ -38,36 +38,36 @@ public class JobFailMonitorHelper { while (!toStop) { try { - List failLogIds = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().findFailJobLogIds(1000); + List failLogIds = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().findFailJobLogIds(1000); if (failLogIds!=null && !failLogIds.isEmpty()) { for (long failLogId: failLogIds) { // lock log - int lockRet = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().updateAlarmStatus(failLogId, 0, -1); + int lockRet = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().updateAlarmStatus(failLogId, 0, -1); if (lockRet < 1) { continue; } - XxlJobLog log = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().load(failLogId); - XxlJobInfo info = XxlJobAdminBootstrap.getAdminConfig().getXxlJobInfoMapper().loadById(log.getJobId()); + XxlJobLog log = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().load(failLogId); + XxlJobInfo info = XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().loadById(log.getJobId()); // 1、fail retry monitor if (log.getExecutorFailRetryCount() > 0) { JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), log.getExecutorParam(), null); String retryMsg = "

>>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<<
"; log.setTriggerMsg(log.getTriggerMsg() + retryMsg); - XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().updateTriggerInfo(log); + XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().updateTriggerInfo(log); } // 2、fail alarm monitor int newAlarmStatus = 0; // 告警状态:0-默认、-1=锁定状态、1-无需告警、2-告警成功、3-告警失败 if (info != null) { - boolean alarmResult = XxlJobAdminBootstrap.getAdminConfig().getJobAlarmer().alarm(info, log); + boolean alarmResult = XxlJobAdminBootstrap.getInstance().getJobAlarmer().alarm(info, log); newAlarmStatus = alarmResult?2:3; } else { newAlarmStatus = 1; } - XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().updateAlarmStatus(failLogId, -1, newAlarmStatus); + XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().updateAlarmStatus(failLogId, -1, newAlarmStatus); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobLogReportHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobLogReportHelper.java index e46f4e26..38bff7ff 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobLogReportHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobLogReportHelper.java @@ -68,7 +68,7 @@ public class JobLogReportHelper { xxlJobLogReport.setSucCount(0); xxlJobLogReport.setFailCount(0); - Map triggerCountMap = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().findLogReport(todayFrom, todayTo); + Map triggerCountMap = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().findLogReport(todayFrom, todayTo); if (triggerCountMap!=null && triggerCountMap.size()>0) { int triggerDayCount = triggerCountMap.containsKey("triggerDayCount")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))):0; int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning")?Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))):0; @@ -81,9 +81,9 @@ public class JobLogReportHelper { } // do refresh - int ret = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogReportMapper().update(xxlJobLogReport); + int ret = XxlJobAdminBootstrap.getInstance().getXxlJobLogReportMapper().update(xxlJobLogReport); if (ret < 1) { - XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogReportMapper().save(xxlJobLogReport); + XxlJobAdminBootstrap.getInstance().getXxlJobLogReportMapper().save(xxlJobLogReport); } } @@ -94,12 +94,12 @@ public class JobLogReportHelper { } // 2、log-clean: switch open & once each day - if (XxlJobAdminBootstrap.getAdminConfig().getLogretentiondays()>0 + if (XxlJobAdminBootstrap.getInstance().getLogretentiondays()>0 && System.currentTimeMillis() - lastCleanLogTime > 24*60*60*1000) { // expire-time Calendar expiredDay = Calendar.getInstance(); - expiredDay.add(Calendar.DAY_OF_MONTH, -1 * XxlJobAdminBootstrap.getAdminConfig().getLogretentiondays()); + expiredDay.add(Calendar.DAY_OF_MONTH, -1 * XxlJobAdminBootstrap.getInstance().getLogretentiondays()); expiredDay.set(Calendar.HOUR_OF_DAY, 0); expiredDay.set(Calendar.MINUTE, 0); expiredDay.set(Calendar.SECOND, 0); @@ -109,9 +109,9 @@ public class JobLogReportHelper { // clean expired log List logIds = null; do { - logIds = XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().findClearLogIds(0, 0, clearBeforeTime, 0, 1000); + logIds = XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().findClearLogIds(0, 0, clearBeforeTime, 0, 1000); if (logIds!=null && logIds.size()>0) { - XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().clearLog(logIds); + XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().clearLog(logIds); } } while (logIds!=null && logIds.size()>0); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java index b91c1c7d..bb9549fe 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobRegistryHelper.java @@ -59,18 +59,18 @@ public class JobRegistryHelper { while (!toStop) { try { // auto registry group - List groupList = XxlJobAdminBootstrap.getAdminConfig().getXxlJobGroupMapper().findByAddressType(0); + List groupList = XxlJobAdminBootstrap.getInstance().getXxlJobGroupMapper().findByAddressType(0); if (groupList!=null && !groupList.isEmpty()) { // remove dead address (admin/executor) - List ids = XxlJobAdminBootstrap.getAdminConfig().getXxlJobRegistryMapper().findDead(RegistryConfig.DEAD_TIMEOUT, new Date()); + List ids = XxlJobAdminBootstrap.getInstance().getXxlJobRegistryMapper().findDead(RegistryConfig.DEAD_TIMEOUT, new Date()); if (ids!=null && ids.size()>0) { - XxlJobAdminBootstrap.getAdminConfig().getXxlJobRegistryMapper().removeDead(ids); + XxlJobAdminBootstrap.getInstance().getXxlJobRegistryMapper().removeDead(ids); } // fresh online address (admin/executor) HashMap> appAddressMap = new HashMap>(); - List list = XxlJobAdminBootstrap.getAdminConfig().getXxlJobRegistryMapper().findAll(RegistryConfig.DEAD_TIMEOUT, new Date()); + List list = XxlJobAdminBootstrap.getInstance().getXxlJobRegistryMapper().findAll(RegistryConfig.DEAD_TIMEOUT, new Date()); if (list != null) { for (XxlJobRegistry item: list) { if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) { @@ -104,7 +104,7 @@ public class JobRegistryHelper { group.setAddressList(addressListStr); group.setUpdateTime(new Date()); - XxlJobAdminBootstrap.getAdminConfig().getXxlJobGroupMapper().update(group); + XxlJobAdminBootstrap.getInstance().getXxlJobGroupMapper().update(group); } } } catch (Throwable e) { @@ -160,7 +160,7 @@ public class JobRegistryHelper { @Override public void run() { // 0-fail; 1-save suc; 2-update suc; - int ret = XxlJobAdminBootstrap.getAdminConfig().getXxlJobRegistryMapper().registrySaveOrUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date()); + int ret = XxlJobAdminBootstrap.getInstance().getXxlJobRegistryMapper().registrySaveOrUpdate(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue(), new Date()); if (ret == 1) { // fresh (add) freshGroupRegistryInfo(registryParam); @@ -191,7 +191,7 @@ public class JobRegistryHelper { registryOrRemoveThreadPool.execute(new Runnable() { @Override public void run() { - int ret = XxlJobAdminBootstrap.getAdminConfig().getXxlJobRegistryMapper().registryDelete(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue()); + int ret = XxlJobAdminBootstrap.getInstance().getXxlJobRegistryMapper().registryDelete(registryParam.getRegistryGroup(), registryParam.getRegistryKey(), registryParam.getRegistryValue()); if (ret > 0) { // fresh (delete) freshGroupRegistryInfo(registryParam); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java index d1f6f3bf..84e78824 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobScheduleHelper.java @@ -51,7 +51,7 @@ public class JobScheduleHelper { logger.info(">>>>>>>>> init xxl-job admin scheduler success."); // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20) - int preReadCount = (XxlJobAdminBootstrap.getAdminConfig().getTriggerPoolFastMax() + XxlJobAdminBootstrap.getAdminConfig().getTriggerPoolSlowMax()) * 20; + int preReadCount = (XxlJobAdminBootstrap.getInstance().getTriggerPoolFastMax() + XxlJobAdminBootstrap.getInstance().getTriggerPoolSlowMax()) * 20; while (!scheduleThreadToStop) { @@ -65,7 +65,7 @@ public class JobScheduleHelper { boolean preReadSuc = true; try { - conn = XxlJobAdminBootstrap.getAdminConfig().getDataSource().getConnection(); + conn = XxlJobAdminBootstrap.getInstance().getDataSource().getConnection(); connAutoCommit = conn.getAutoCommit(); conn.setAutoCommit(false); @@ -76,7 +76,7 @@ public class JobScheduleHelper { // 1、pre read long nowTime = System.currentTimeMillis(); - List scheduleList = XxlJobAdminBootstrap.getAdminConfig().getXxlJobInfoMapper().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount); + List scheduleList = XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount); if (scheduleList!=null && scheduleList.size()>0) { // 2、push time-ring for (XxlJobInfo jobInfo: scheduleList) { @@ -139,7 +139,7 @@ public class JobScheduleHelper { // 3、update trigger info for (XxlJobInfo jobInfo: scheduleList) { - XxlJobAdminBootstrap.getAdminConfig().getXxlJobInfoMapper().scheduleUpdate(jobInfo); + XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().scheduleUpdate(jobInfo); } } else { diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobTriggerPoolHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobTriggerPoolHelper.java index 9b6f3097..e51f2dd1 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobTriggerPoolHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/thread/JobTriggerPoolHelper.java @@ -27,7 +27,7 @@ public class JobTriggerPoolHelper { public void start(){ fastTriggerPool = new ThreadPoolExecutor( 10, - XxlJobAdminBootstrap.getAdminConfig().getTriggerPoolFastMax(), + XxlJobAdminBootstrap.getInstance().getTriggerPoolFastMax(), 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(2000), @@ -46,7 +46,7 @@ public class JobTriggerPoolHelper { slowTriggerPool = new ThreadPoolExecutor( 10, - XxlJobAdminBootstrap.getAdminConfig().getTriggerPoolSlowMax(), + XxlJobAdminBootstrap.getInstance().getTriggerPoolSlowMax(), 60L, TimeUnit.SECONDS, new LinkedBlockingQueue(5000), diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java index 0e98be70..0da9d679 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/scheduler/trigger/XxlJobTrigger.java @@ -5,7 +5,6 @@ import com.xxl.job.admin.model.XxlJobGroup; import com.xxl.job.admin.model.XxlJobInfo; import com.xxl.job.admin.model.XxlJobLog; import com.xxl.job.admin.scheduler.route.ExecutorRouteStrategyEnum; -import com.xxl.job.admin.scheduler.scheduler.XxlJobScheduler; import com.xxl.job.admin.util.I18nUtil; import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.model.ReturnT; @@ -49,7 +48,7 @@ public class XxlJobTrigger { String addressList) { // load data - XxlJobInfo jobInfo = XxlJobAdminBootstrap.getAdminConfig().getXxlJobInfoMapper().loadById(jobId); + XxlJobInfo jobInfo = XxlJobAdminBootstrap.getInstance().getXxlJobInfoMapper().loadById(jobId); if (jobInfo == null) { logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}", jobId); return; @@ -58,7 +57,7 @@ public class XxlJobTrigger { jobInfo.setExecutorParam(executorParam); } int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount(); - XxlJobGroup group = XxlJobAdminBootstrap.getAdminConfig().getXxlJobGroupMapper().load(jobInfo.getJobGroup()); + XxlJobGroup group = XxlJobAdminBootstrap.getInstance().getXxlJobGroupMapper().load(jobInfo.getJobGroup()); // cover addressList if (addressList!=null && addressList.trim().length()>0) { @@ -120,7 +119,7 @@ public class XxlJobTrigger { jobLog.setJobGroup(jobInfo.getJobGroup()); jobLog.setJobId(jobInfo.getId()); jobLog.setTriggerTime(new Date()); - XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().save(jobLog); + XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().save(jobLog); logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId()); // 2、init trigger-param @@ -193,7 +192,7 @@ public class XxlJobTrigger { //jobLog.setTriggerTime(); jobLog.setTriggerCode(triggerResult.getCode()); jobLog.setTriggerMsg(triggerMsgSb.toString()); - XxlJobAdminBootstrap.getAdminConfig().getXxlJobLogMapper().updateTriggerInfo(jobLog); + XxlJobAdminBootstrap.getInstance().getXxlJobLogMapper().updateTriggerInfo(jobLog); logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId()); } @@ -207,7 +206,7 @@ public class XxlJobTrigger { public static ReturnT runExecutor(TriggerParam triggerParam, String address){ ReturnT runResult = null; try { - ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address); + ExecutorBiz executorBiz = XxlJobAdminBootstrap.getExecutorBiz(address); runResult = executorBiz.run(triggerParam); } catch (Exception e) { logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/util/I18nUtil.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/I18nUtil.java index 7895565e..1c6edd1c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/util/I18nUtil.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/util/I18nUtil.java @@ -30,7 +30,7 @@ public class I18nUtil { } try { // build i18n prop - String i18n = XxlJobAdminBootstrap.getAdminConfig().getI18n(); + String i18n = XxlJobAdminBootstrap.getInstance().getI18n(); String i18nFile = MessageFormat.format("i18n/message_{0}.properties", i18n); // load prop