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 45583e86..08fa6726 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 @@ -149,8 +149,8 @@ public class JobLogController { ReturnT runResult = executorBiz.kill(String.valueOf(log.getJobGroup()), log.getJobName()); if (ReturnT.SUCCESS_CODE == runResult.getCode()) { - log.setHandleCode(ReturnT.SUCCESS_CODE); - log.setHandleMsg("人为操作主动终止"); + log.setHandleCode(ReturnT.FAIL_CODE); + log.setHandleMsg("人为操作主动终止:" + (runResult.getMsg()!=null?runResult.getMsg():"")); log.setHandleTime(new Date()); xxlJobLogDao.updateHandleInfo(log); return new ReturnT(runResult.getMsg()); diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java index e0dce473..ccde984c 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java @@ -74,14 +74,14 @@ public class RemoteHttpJobBean extends QuartzJobBean { } // failover trigger - ReturnT responseModel = failoverTrigger(addressList, triggerParam, jobLog); + ReturnT triggerResult = failoverTrigger(addressList, triggerParam, jobLog); jobLog.setExecutorHandler(jobInfo.getExecutorHandler()); jobLog.setExecutorParam(jobInfo.getExecutorParam()); - logger.info(">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, responseModel:{}", jobLog.getId(), responseModel.toString()); + logger.info(">>>>>>>>>>> xxl-job failoverTrigger, jobId:{}, triggerResult:{}", jobLog.getId(), triggerResult.toString()); // update trigger info 2/2 - jobLog.setTriggerCode(responseModel.getCode()); - jobLog.setTriggerMsg(responseModel.getMsg()); + jobLog.setTriggerCode(triggerResult.getCode()); + jobLog.setTriggerMsg(triggerResult.getMsg()); XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog); // monitor triger 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 d0437f7a..782fab8c 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 @@ -2,6 +2,7 @@ package com.xxl.job.admin.core.schedule; import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean; import com.xxl.job.admin.core.model.XxlJobInfo; +import com.xxl.job.admin.core.thread.JobMonitorHelper; import com.xxl.job.admin.core.thread.JobRegistryHelper; import com.xxl.job.admin.dao.IXxlJobGroupDao; import com.xxl.job.admin.dao.IXxlJobInfoDao; @@ -67,12 +68,21 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In callbackAddress = IpUtil.getIpPort(callBackPort);; } - // init JobRegistryHelper - JobRegistryHelper.discover("g", "k"); + // admin registry run + JobRegistryHelper.getInstance().start(); + + // admin monitor run + JobMonitorHelper.getInstance().start(); } // destroy public void destroy(){ + // admin registry stop + JobRegistryHelper.getInstance().stop(); + + // admin monitor stop + JobMonitorHelper.getInstance().stop(); + serverFactory.destroy(); } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java index e695bdc4..b03858f2 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobMonitorHelper.java @@ -16,28 +16,32 @@ import java.util.Set; import java.util.concurrent.*; /** - * job monitor helper + * job monitor instance * @author xuxueli 2015-9-1 18:05:56 */ public class JobMonitorHelper { private static Logger logger = LoggerFactory.getLogger(JobMonitorHelper.class); - private static JobMonitorHelper helper = new JobMonitorHelper(); - private ExecutorService executor = Executors.newCachedThreadPool(); + private static JobMonitorHelper instance = new JobMonitorHelper(); + public static JobMonitorHelper getInstance(){ + return instance; + } + private LinkedBlockingQueue queue = new LinkedBlockingQueue(0xfff8); - private ConcurrentHashMap countMap = new ConcurrentHashMap(); - - public JobMonitorHelper(){ - // consumer - executor.execute(new Runnable() { + + private Thread monitorThread; + private boolean toStop = false; + public void start(){ + monitorThread = new Thread(new Runnable() { + @Override public void run() { while (true) { try { logger.debug(">>>>>>>>>>> job monitor beat ... "); - Integer jobLogId = JobMonitorHelper.helper.queue.take(); + Integer jobLogId = JobMonitorHelper.instance.queue.take(); if (jobLogId != null && jobLogId > 0) { - logger.info(">>>>>>>>>>> job monitor heat success, JobLogId:{}", jobLogId); + logger.debug(">>>>>>>>>>> job monitor heat success, JobLogId:{}", jobLogId); XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId); if (log!=null) { if (ReturnT.SUCCESS_CODE==log.getTriggerCode() && log.getHandleCode()==0) { @@ -73,11 +77,18 @@ public class JobMonitorHelper { } } }); + monitorThread.setDaemon(true); + monitorThread.start(); + } + + public void stop(){ + toStop = true; + //monitorThread.interrupt(); } // producer public static void monitor(int jobLogId){ - JobMonitorHelper.helper.queue.offer(jobLogId); + getInstance().queue.offer(jobLogId); } } diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java index 5b8d06a4..a0d4b500 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java @@ -12,20 +12,26 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; /** - * job registry helper + * job registry instance * @author xuxueli 2016-10-02 19:10:24 */ public class JobRegistryHelper { private static Logger logger = LoggerFactory.getLogger(JobRegistryHelper.class); - private static JobRegistryHelper helper = new JobRegistryHelper(); + private static JobRegistryHelper instance = new JobRegistryHelper(); + public static JobRegistryHelper getInstance(){ + return instance; + } + private ConcurrentHashMap> registMap = new ConcurrentHashMap>(); - public JobRegistryHelper(){ - Thread registryThread = new Thread(new Runnable() { + private Thread registryThread; + private boolean toStop = false; + public void start(){ + registryThread = new Thread(new Runnable() { @Override public void run() { - while (true) { + while (!toStop) { try { // registry admin int ret = XxlJobDynamicScheduler.xxlJobRegistryDao.registryUpdate(RegistHelper.RegistType.ADMIN.name(), RegistHelper.RegistType.ADMIN.name(), XxlJobDynamicScheduler.getCallbackAddress()); @@ -50,19 +56,23 @@ public class JobRegistryHelper { } registMap = temp; } catch (Exception e) { - logger.error("job registry helper error:{}", e); + logger.error("job registry instance error:{}", e); } try { TimeUnit.SECONDS.sleep(RegistHelper.TIMEOUT); } catch (InterruptedException e) { - logger.error("job registry helper error:{}", e); + logger.error("job registry instance error:{}", e); } } } }); registryThread.setDaemon(true); registryThread.start(); + } + public void stop(){ + toStop = true; + //registryThread.interrupt(); } private static String makeGroupKey(String registryGroup, String registryKey){ @@ -71,7 +81,7 @@ public class JobRegistryHelper { public static List discover(String registryGroup, String registryKey){ String groupKey = makeGroupKey(registryGroup, registryKey); - return helper.registMap.get(groupKey); + return instance.registMap.get(groupKey); } } diff --git a/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl b/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl index 48439e33..55db2d53 100644 --- a/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl +++ b/xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl @@ -173,7 +173,7 @@ <#macro commonFooter >