quartz2.3.0任务执行中故障情况,可设置重新执行任务

Posted zhuwenjoyce

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了quartz2.3.0任务执行中故障情况,可设置重新执行任务相关的知识,希望对你有一定的参考价值。

任务类

package org.quartz.examples.example11;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;

/**
 * job任务类
 */
public class SimpleJob implements Job 

    private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class);

    // job parameter
    public static final String DELAY_TIME = "delay time";

    //必须要有public修饰的无参构造函数
    public SimpleJob() 
    

    // 任务执行方法
    public void execute(JobExecutionContext context) throws JobExecutionException 

        JobKey jobKey = context.getJobDetail().getKey();
        LOG.info("执行任务开始:" + jobKey + " executing at " + new Date());

        // 等待一段时间delayTime毫秒
        long delayTime = context.getJobDetail().getJobDataMap().getLong(DELAY_TIME);
        try 
            Thread.sleep(delayTime);
         catch (Exception e) 
            //
        

        LOG.info("执行任务结束:" + jobKey + " at " + new Date());
    

 

调度器类

package org.quartz.examples.example11;

import static org.quartz.DateBuilder.futureDate;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import org.quartz.DateBuilder.IntervalUnit;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 这个示例将生成大量要运行的作业
 */
public class LoadExample 

    // 初始化job任务个数
    private int _numberOfJobs = 500;

    public LoadExample(int inNumberOfJobs) 
        _numberOfJobs = inNumberOfJobs;
    

    public void run() throws Exception 
        Logger LOG = LoggerFactory.getLogger(LoadExample.class);

        // 初始化一个调度工厂,并实例化一个调度类
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        // 计划运行500个作业
        for (int count = 1; count <= _numberOfJobs; count++) 
            // requestRecovery:请调度程序重新执行此作业,如果该作业在调度程序宕机时正在进行中…
            //requestRecovery:指示调度程序,如果遇到“恢复”或“故障转移”情况,是否应重新执行作业。如果没有显式设置,则默认值为false
            JobDetail job = newJob(SimpleJob.class).withIdentity("job" + count, "group_1").requestRecovery().build();

            // 让工作人员推迟一点时间……模拟工作……
            long timeDelay = (long) (java.lang.Math.random() * 2500);
            job.getJobDataMap().put(SimpleJob.DELAY_TIME, timeDelay); //随机数

            //每个触发器的启动时间都间隔100毫秒,相距时间非常短
            Trigger trigger = newTrigger().withIdentity("trigger_" + count, "group_1")
                    .startAt(futureDate((10000 + (count * 100)), IntervalUnit.MILLISECOND))
                    .build();

            sched.scheduleJob(job, trigger);
            if (count % 25 == 0) 
                LOG.info("...scheduled " + count + " jobs");
            
        
        
        sched.start();
        LOG.info("------- Waiting one minutes... -----------");

        // 等一分钟,展示job任务的定时打印
        try 
            Thread.sleep(60L * 1000L);
         catch (Exception e) 
            //
        

        sched.shutdown(true);
        LOG.info("------- Shutdown Complete -----------------");

        SchedulerMetaData metaData = sched.getMetaData();
        LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
    

    public static void main(String[] args) throws Exception 

        int numberOfJobs = 500;
        if (args.length == 1) 
            numberOfJobs = Integer.parseInt(args[0]);
        
        if (args.length > 1) 
            System.out.println("Usage: java " + LoadExample.class.getName() + "[# of jobs]");
            return;
        
        LoadExample example = new LoadExample(numberOfJobs);
        example.run();
    

 

以上是关于quartz2.3.0任务执行中故障情况,可设置重新执行任务的主要内容,如果未能解决你的问题,请参考以下文章

quartz2.3.0job任务监听器,监听任务执行前后取消手动处理方法

quartz2.3.0使用日历排除不应该执行任务的时间段

quartz2.3.0(十五)执行暂停继续执行清除,花式操作数据库中持久化的job任务

quartz2.3.0xml配置方式定义quartz定时任务

SpringBoot开发案例之整合Quartz任务管理系统

SpringBoot2.x开发案例之整合Quartz任务管理系统