1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- package com.xxl.job.admin.core.thread;
- import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
- import com.xxl.job.admin.core.model.XxlJobLog;
- import com.xxl.job.admin.core.util.I18nUtil;
- import com.xxl.job.core.biz.model.ReturnT;
- import com.xxl.job.core.util.DateUtil;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import java.util.Date;
- import java.util.List;
- import java.util.concurrent.TimeUnit;
- /**
- * job lose-monitor instance
- *
- * @author xuxueli 2015-9-1 18:05:56
- */
- public class JobLosedMonitorHelper {
- private static Logger logger = LoggerFactory.getLogger(JobLosedMonitorHelper.class);
-
- private static JobLosedMonitorHelper instance = new JobLosedMonitorHelper();
- public static JobLosedMonitorHelper getInstance(){
- return instance;
- }
- // ---------------------- monitor ----------------------
- private Thread monitorThread;
- private volatile boolean toStop = false;
- public void start(){
- monitorThread = new Thread(new Runnable() {
- @Override
- public void run() {
- // monitor
- while (!toStop) {
- try {
- // 任务结果丢失处理:调度记录停留在 "运行中" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败;
- Date losedTime = DateUtil.addMinutes(new Date(), -10);
- List<Long> losedJobIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLostJobIds(losedTime);
- if (losedJobIds!=null && losedJobIds.size()>0) {
- for (Long logId: losedJobIds) {
- XxlJobLog jobLog = new XxlJobLog();
- jobLog.setId(logId);
- jobLog.setHandleTime(new Date());
- jobLog.setHandleCode(ReturnT.FAIL_CODE);
- jobLog.setHandleMsg( I18nUtil.getString("joblog_lost_fail") );
- XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateHandleInfo(jobLog);
- }
- }
- } catch (Exception e) {
- if (!toStop) {
- logger.error(">>>>>>>>>>> xxl-job, job fail monitor thread error:{}", e);
- }
- }
- try {
- TimeUnit.SECONDS.sleep(60);
- } catch (Exception e) {
- if (!toStop) {
- logger.error(e.getMessage(), e);
- }
- }
- }
- logger.info(">>>>>>>>>>> xxl-job, JobLosedMonitorHelper stop");
- }
- });
- monitorThread.setDaemon(true);
- monitorThread.setName("xxl-job, admin JobLosedMonitorHelper");
- monitorThread.start();
- }
- public void toStop(){
- toStop = true;
- // interrupt and wait
- monitorThread.interrupt();
- try {
- monitorThread.join();
- } catch (InterruptedException e) {
- logger.error(e.getMessage(), e);
- }
- }
- }
|