diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java index e98c74e5..5d801891 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java @@ -120,7 +120,7 @@ public class JobLogController { @ResponseBody public ReturnT logDetailCat(String executorAddress, long triggerTime, int logId, int fromLineNum){ try { - ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, executorAddress, XxlJobDynamicScheduler.getAccessToken()).getObject(); + ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(executorAddress); ReturnT logResult = executorBiz.log(triggerTime, logId, fromLineNum); // is end @@ -154,7 +154,7 @@ public class JobLogController { // request of kill ReturnT runResult = null; try { - ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, log.getExecutorAddress(), XxlJobDynamicScheduler.getAccessToken()).getObject(); + ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(log.getExecutorAddress()); runResult = executorBiz.kill(jobInfo.getId()); } catch (Exception e) { logger.error(e.getMessage(), e); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java index 6bb17bfa..58dd40d8 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java @@ -1,10 +1,7 @@ package com.xxl.job.admin.core.route; -import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler; -import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; -import com.xxl.job.core.rpc.netcom.NetComClientProxy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,30 +22,4 @@ public abstract class ExecutorRouter { */ public abstract ReturnT routeRun(TriggerParam triggerParam, ArrayList addressList); - /** - * run executor - * @param triggerParam - * @param address - * @return ReturnT.content: final address - */ - public static ReturnT runExecutor(TriggerParam triggerParam, String address){ - ReturnT runResult = null; - try { - ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobDynamicScheduler.getAccessToken()).getObject(); - runResult = executorBiz.run(triggerParam); - } catch (Exception e) { - logger.error(e.getMessage(), e); - runResult = new ReturnT(ReturnT.FAIL_CODE, ""+e ); - } - - StringBuffer runResultSB = new StringBuffer("触发调度:"); - runResultSB.append("
address:").append(address); - runResultSB.append("
code:").append(runResult.getCode()); - runResultSB.append("
msg:").append(runResult.getMsg()); - - runResult.setMsg(runResultSB.toString()); - runResult.setContent(address); - return runResult; - } - } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java index 753ba6f1..f3840a02 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java @@ -2,10 +2,10 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; -import com.xxl.job.core.rpc.netcom.NetComClientProxy; import java.util.ArrayList; @@ -26,7 +26,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter { // beat ReturnT idleBeatResult = null; try { - ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobDynamicScheduler.getAccessToken()).getObject(); + ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(address); idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId()); } catch (Exception e) { logger.error(e.getMessage(), e); @@ -41,7 +41,7 @@ public class ExecutorRouteBusyover extends ExecutorRouter { // beat success if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) { - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); idleBeatResultSB.append("

").append(runResult.getMsg()); // result diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java index 3cbda46d..a6540f7e 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java @@ -1,6 +1,7 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -82,7 +83,7 @@ public class ExecutorRouteConsistentHash extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java index 776927c4..d78cbaca 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java @@ -2,10 +2,10 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; -import com.xxl.job.core.rpc.netcom.NetComClientProxy; import java.util.ArrayList; @@ -26,7 +26,7 @@ public class ExecutorRouteFailover extends ExecutorRouter { // beat ReturnT beatResult = null; try { - ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobDynamicScheduler.getAccessToken()).getObject(); + ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(address); beatResult = executorBiz.beat(); } catch (Exception e) { logger.error(e.getMessage(), e); @@ -41,7 +41,7 @@ public class ExecutorRouteFailover extends ExecutorRouter { // beat success if (beatResult.getCode() == ReturnT.SUCCESS_CODE) { - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); beatResultSB.append("

").append(runResult.getMsg()); // result diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java index b3a71672..e500825d 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java @@ -1,7 +1,7 @@ package com.xxl.job.admin.core.route.strategy; -import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -23,7 +23,7 @@ public class ExecutorRouteFirst extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java index 7b34ea99..a10fac4c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java @@ -1,6 +1,7 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -62,7 +63,7 @@ public class ExecutorRouteLFU extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java index 7b7e0909..7e8f6176 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java @@ -1,6 +1,7 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -61,7 +62,7 @@ public class ExecutorRouteLRU extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java index c94dc938..81b72534 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java @@ -1,7 +1,7 @@ package com.xxl.job.admin.core.route.strategy; -import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -22,7 +22,7 @@ public class ExecutorRouteLast extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java index f27a6bda..1db6438a 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java @@ -1,6 +1,7 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -25,7 +26,7 @@ public class ExecutorRouteRandom extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java index a09412c0..e12e7490 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java @@ -1,6 +1,7 @@ package com.xxl.job.admin.core.route.strategy; import com.xxl.job.admin.core.route.ExecutorRouter; +import com.xxl.job.admin.core.trigger.XxlJobTrigger; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; @@ -41,7 +42,7 @@ public class ExecutorRouteRound extends ExecutorRouter { String address = route(triggerParam.getJobId(), addressList); // run executor - ReturnT runResult = runExecutor(triggerParam, address); + ReturnT runResult = XxlJobTrigger.runExecutor(triggerParam, address); runResult.setContent(address); return runResult; } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java index 7f61cf25..f30d6144 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java @@ -9,29 +9,33 @@ import com.xxl.job.admin.dao.XxlJobInfoDao; import com.xxl.job.admin.dao.XxlJobLogDao; import com.xxl.job.admin.dao.XxlJobRegistryDao; import com.xxl.job.core.biz.AdminBiz; +import com.xxl.job.core.biz.ExecutorBiz; +import com.xxl.job.core.rpc.netcom.NetComClientProxy; import com.xxl.job.core.rpc.netcom.NetComServerFactory; import org.quartz.*; import org.quartz.Trigger.TriggerState; -import org.quartz.impl.matchers.GroupMatcher; import org.quartz.impl.triggers.CronTriggerImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.util.Assert; -import java.util.*; +import java.util.Date; +import java.util.HashSet; +import java.util.concurrent.ConcurrentHashMap; /** * base quartz scheduler util * @author xuxueli 2015-12-19 16:13:53 */ -public final class XxlJobDynamicScheduler implements ApplicationContextAware, InitializingBean { +public final class XxlJobDynamicScheduler implements ApplicationContextAware { private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler.class); - - // Scheduler + + // ---------------------- param ---------------------- + + // scheduler private static Scheduler scheduler; public void setScheduler(Scheduler scheduler) { XxlJobDynamicScheduler.scheduler = scheduler; @@ -42,25 +46,41 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In public void setAccessToken(String accessToken) { this.accessToken = accessToken; } - public static String getAccessToken() { - return accessToken; - } - // init + // dao + public static XxlJobLogDao xxlJobLogDao; + public static XxlJobInfoDao xxlJobInfoDao; + public static XxlJobRegistryDao xxlJobRegistryDao; + public static XxlJobGroupDao xxlJobGroupDao; + public static AdminBiz adminBiz; + + // ---------------------- applicationContext ---------------------- + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + XxlJobDynamicScheduler.xxlJobLogDao = applicationContext.getBean(XxlJobLogDao.class); + XxlJobDynamicScheduler.xxlJobInfoDao = applicationContext.getBean(XxlJobInfoDao.class); + XxlJobDynamicScheduler.xxlJobRegistryDao = applicationContext.getBean(XxlJobRegistryDao.class); + XxlJobDynamicScheduler.xxlJobGroupDao = applicationContext.getBean(XxlJobGroupDao.class); + XxlJobDynamicScheduler.adminBiz = applicationContext.getBean(AdminBiz.class); + } + + // ---------------------- init + destroy ---------------------- public void init() throws Exception { - // admin registry monitor run + // admin registry monitor run JobRegistryMonitorHelper.getInstance().start(); // admin monitor run JobFailMonitorHelper.getInstance().start(); - // rpc-service, base on spring-mvc + // admin-server(spring-mvc) NetComServerFactory.putService(AdminBiz.class, XxlJobDynamicScheduler.adminBiz); NetComServerFactory.setAccessToken(accessToken); + // valid + Assert.notNull(scheduler, "quartz scheduler is null"); + logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler); } - - // destroy + public void destroy(){ // admin registry stop JobRegistryMonitorHelper.getInstance().toStop(); @@ -68,64 +88,35 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In // admin monitor stop JobFailMonitorHelper.getInstance().toStop(); } - - // xxlJobLogDao、xxlJobInfoDao - public static XxlJobLogDao xxlJobLogDao; - public static XxlJobInfoDao xxlJobInfoDao; - public static XxlJobRegistryDao xxlJobRegistryDao; - public static XxlJobGroupDao xxlJobGroupDao; - public static AdminBiz adminBiz; - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - XxlJobDynamicScheduler.xxlJobLogDao = applicationContext.getBean(XxlJobLogDao.class); - XxlJobDynamicScheduler.xxlJobInfoDao = applicationContext.getBean(XxlJobInfoDao.class); - XxlJobDynamicScheduler.xxlJobRegistryDao = applicationContext.getBean(XxlJobRegistryDao.class); - XxlJobDynamicScheduler.xxlJobGroupDao = applicationContext.getBean(XxlJobGroupDao.class); - XxlJobDynamicScheduler.adminBiz = applicationContext.getBean(AdminBiz.class); - } - - @Override - public void afterPropertiesSet() throws Exception { - Assert.notNull(scheduler, "quartz scheduler is null"); - logger.info(">>>>>>>>> init quartz scheduler success.[{}]", scheduler); - + // ---------------------- executor-client ---------------------- + private static ConcurrentHashMap 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 = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, accessToken).getObject(); + executorBizRepository.put(address, executorBiz); + return executorBiz; } - - // getJobKeys - @Deprecated - public static List> getJobList(){ - List> jobList = new ArrayList>(); - - try { - if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) { - return null; - } - String groupName = scheduler.getJobGroupNames().get(0); - Set jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName)); - if (jobKeys!=null && jobKeys.size()>0) { - for (JobKey jobKey : jobKeys) { - TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP); - Trigger trigger = scheduler.getTrigger(triggerKey); - JobDetail jobDetail = scheduler.getJobDetail(jobKey); - TriggerState triggerState = scheduler.getTriggerState(triggerKey); - Map jobMap = new HashMap(); - jobMap.put("TriggerKey", triggerKey); - jobMap.put("Trigger", trigger); - jobMap.put("JobDetail", jobDetail); - jobMap.put("TriggerState", triggerState); - jobList.add(jobMap); - } - } - - } catch (SchedulerException e) { - e.printStackTrace(); - return null; - } - return jobList; - } - - // fill job info + + // ---------------------- schedule util ---------------------- + + /** + * fill job info + * + * @param jobInfo + */ public static void fillJobInfo(XxlJobInfo jobInfo) { // TriggerKey : name + group String group = String.valueOf(jobInfo.getJobGroup()); @@ -156,14 +147,28 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In } } - // check if exists + /** + * check if exists + * + * @param jobName + * @param jobGroup + * @return + * @throws SchedulerException + */ public static boolean checkExists(String jobName, String jobGroup) throws SchedulerException{ TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); return scheduler.checkExists(triggerKey); } - // addJob 新增 - @SuppressWarnings("unchecked") + /** + * addJob + * + * @param jobName + * @param jobGroup + * @param cronExpression + * @return + * @throws SchedulerException + */ public static boolean addJob(String jobName, String jobGroup, String cronExpression) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); @@ -196,7 +201,15 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In return true; } - // reschedule + /** + * rescheduleJob + * + * @param jobGroup + * @param jobName + * @param cronExpression + * @return + * @throws SchedulerException + */ public static boolean rescheduleJob(String jobGroup, String jobName, String cronExpression) throws SchedulerException { // TriggerKey valid if_exists @@ -245,7 +258,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In return true; } - // unscheduleJob + /** + * unscheduleJob + * + * @param jobName + * @param jobGroup + * @return + * @throws SchedulerException + */ public static boolean removeJob(String jobName, String jobGroup) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); @@ -257,7 +277,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In return true; } - // Pause + /** + * pause + * + * @param jobName + * @param jobGroup + * @return + * @throws SchedulerException + */ public static boolean pauseJob(String jobName, String jobGroup) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); @@ -273,7 +300,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In return result; } - // resume + /** + * resume + * + * @param jobName + * @param jobGroup + * @return + * @throws SchedulerException + */ public static boolean resumeJob(String jobName, String jobGroup) throws SchedulerException { // TriggerKey : name + group TriggerKey triggerKey = TriggerKey.triggerKey(jobName, jobGroup); @@ -289,7 +323,14 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In return result; } - // run + /** + * run + * + * @param jobName + * @param jobGroup + * @return + * @throws SchedulerException + */ public static boolean triggerJob(String jobName, String jobGroup) throws SchedulerException { // TriggerKey : name + group JobKey jobKey = new JobKey(jobName, jobGroup); @@ -305,5 +346,41 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In return result; } + /** + * finaAllJobList + * + * @return + *//* + @Deprecated + public static List> finaAllJobList(){ + List> jobList = new ArrayList>(); + + try { + if (scheduler.getJobGroupNames()==null || scheduler.getJobGroupNames().size()==0) { + return null; + } + String groupName = scheduler.getJobGroupNames().get(0); + Set jobKeys = scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName)); + if (jobKeys!=null && jobKeys.size()>0) { + for (JobKey jobKey : jobKeys) { + TriggerKey triggerKey = TriggerKey.triggerKey(jobKey.getName(), Scheduler.DEFAULT_GROUP); + Trigger trigger = scheduler.getTrigger(triggerKey); + JobDetail jobDetail = scheduler.getJobDetail(jobKey); + TriggerState triggerState = scheduler.getTriggerState(triggerKey); + Map jobMap = new HashMap(); + jobMap.put("TriggerKey", triggerKey); + jobMap.put("Trigger", trigger); + jobMap.put("JobDetail", jobDetail); + jobMap.put("TriggerState", triggerState); + jobList.add(jobMap); + } + } + + } catch (SchedulerException e) { + e.printStackTrace(); + return null; + } + return jobList; + }*/ } \ No newline at end of file diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java index bbad8c1e..7c916b9b 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java @@ -5,9 +5,9 @@ import com.xxl.job.admin.core.model.XxlJobGroup; import com.xxl.job.admin.core.model.XxlJobInfo; import com.xxl.job.admin.core.model.XxlJobLog; import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum; -import com.xxl.job.admin.core.route.ExecutorRouter; import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler; import com.xxl.job.admin.core.thread.JobFailMonitorHelper; +import com.xxl.job.core.biz.ExecutorBiz; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.biz.model.TriggerParam; import com.xxl.job.core.enums.ExecutorBlockStrategyEnum; @@ -90,12 +90,12 @@ public class XxlJobTrigger { triggerParam.setBroadcastTotal(addressList.size()); // update02 // 4.2、trigger-run (route run / trigger remote executor) - triggerResult = ExecutorRouter.runExecutor(triggerParam, address); // update03 + triggerResult = runExecutor(triggerParam, address); // update03 triggerMsgSb.append("

>>>>>>>>>>>触发调度<<<<<<<<<<<
").append(triggerResult.getMsg()); // 4.3、trigger (fail retry) if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && failStrategy == ExecutorFailStrategyEnum.FAIL_RETRY) { - triggerResult = ExecutorRouter.runExecutor(triggerParam, address); // update04 + triggerResult = runExecutor(triggerParam, address); // update04 triggerMsgSb.append("

>>>>>>>>>>>失败重试<<<<<<<<<<<
").append(triggerResult.getMsg()); } } @@ -179,4 +179,30 @@ public class XxlJobTrigger { logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId()); } + /** + * run executor + * @param triggerParam + * @param address + * @return ReturnT.content: final address + */ + public static ReturnT runExecutor(TriggerParam triggerParam, String address){ + ReturnT runResult = null; + try { + ExecutorBiz executorBiz = XxlJobDynamicScheduler.getExecutorBiz(address); + runResult = executorBiz.run(triggerParam); + } catch (Exception e) { + logger.error(e.getMessage(), e); + runResult = new ReturnT(ReturnT.FAIL_CODE, ""+e ); + } + + StringBuffer runResultSB = new StringBuffer("触发调度:"); + runResultSB.append("
address:").append(address); + runResultSB.append("
code:").append(runResult.getCode()); + runResultSB.append("
msg:").append(runResult.getMsg()); + + runResult.setMsg(runResultSB.toString()); + runResult.setContent(address); + return runResult; + } + } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java index 6dde1a94..1d5cb849 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java @@ -26,7 +26,7 @@ import java.util.concurrent.ConcurrentHashMap; public class XxlJobExecutor implements ApplicationContextAware { private static final Logger logger = LoggerFactory.getLogger(XxlJobExecutor.class); - // ---------------------------------- param ------------------------------------ + // ---------------------- param ---------------------- private String ip; private int port = 9999; private String appName; @@ -54,7 +54,7 @@ public class XxlJobExecutor implements ApplicationContextAware { } - // ---------------------------------- applicationContext ------------------------------------ + // ---------------------- applicationContext ---------------------- private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { @@ -65,7 +65,7 @@ public class XxlJobExecutor implements ApplicationContextAware { } - // ---------------------------------- start + stop ------------------------------------ + // ---------------------- start + stop ---------------------- public void start() throws Exception { // init admin-client initAdminBizList(adminAddresses, accessToken); @@ -95,7 +95,7 @@ public class XxlJobExecutor implements ApplicationContextAware { } - // ---------------------------------- admin-client ------------------------------------ + // ---------------------- admin-client ---------------------- private static List adminBizList; private static void initAdminBizList(String adminAddresses, String accessToken) throws Exception { if (adminAddresses!=null && adminAddresses.trim().length()>0) { @@ -116,7 +116,7 @@ public class XxlJobExecutor implements ApplicationContextAware { } - // ---------------------------------- executor-server ------------------------------------ + // ---------------------- executor-server(jetty) ---------------------- private NetComServerFactory serverFactory = new NetComServerFactory(); private void initExecutorServer(int port, String ip, String appName, String accessToken) throws Exception { NetComServerFactory.putService(ExecutorBiz.class, new ExecutorBizImpl()); // rpc-service, base on jetty @@ -128,7 +128,7 @@ public class XxlJobExecutor implements ApplicationContextAware { } - // ---------------------------------- job handler repository ------------------------------------ + // ---------------------- job handler repository ---------------------- private static ConcurrentHashMap jobHandlerRepository = new ConcurrentHashMap(); public static IJobHandler registJobHandler(String name, IJobHandler jobHandler){ logger.info("xxl-job register jobhandler success, name:{}, jobHandler:{}", name, jobHandler); @@ -156,7 +156,7 @@ public class XxlJobExecutor implements ApplicationContextAware { } - // ---------------------------------- job thread repository ------------------------------------ + // ---------------------- job thread repository ---------------------- private static ConcurrentHashMap JobThreadRepository = new ConcurrentHashMap(); public static JobThread registJobThread(int jobId, IJobHandler handler, String removeOldReason){ JobThread newJobThread = new JobThread(jobId, handler);