Quartz框架详解

Quartz框架可以实现 异步定时任务。Quartz框架下载地址
注意1版本和2版本写法完全不一样,本文采用的是2-x版本
下载完毕后进入进入lib文件夹,然后将下面的几个jar引入项目:
Quartz框架详解_第1张图片
基本实现步骤:
发布任务,编写触发器,编写调度器
任务一般写在Service层

package luzelong.service;

public class MeetingService {
    public void calClassMeeting() throws InterruptedException {
        System.out.println("需要提醒的任务(召开会议...)");
        Thread.sleep(5000);
        System.out.println("end....");
    }
}

实现一个job接口

package luzelong.job;

import luzelong.service.MeetingService;
import org.quartz.*;

import java.util.List;

public class PlanJob implements Job {
MeetingService meetingService = new MeetingService();
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        try {
                    TriggerKey triggerKey = jobExecutionContext.getTrigger().getKey();
            JobKey jobKey = jobExecutionContext.getJobDetail().getKey();
            System.out.println(triggerKey+"\n"+jobKey);
            JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
            List<String> infos = (List<String>) jobDataMap.get("infos");
            System.out.println(infos);
            //存放计划执行的任务(上面的都可以省略,下面的一行才是核心)
            meetingService.calClassMeeting();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}

编写触发器,编写调度器直接在测试方法中写


package luzelong.test;

import luzelong.job.PlanJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;


public class TestQuartz {
    public static void main(String[] args) throws SchedulerException, InterruptedException, ParseException {
        JobBuilder jobBuilder = JobBuilder.newJob(PlanJob.class);//包装原则
        //产生实际使用的Job
        JobDetail jobDetail = jobBuilder.withIdentity("meeting Job","group1").build();

        //向Job的execute()中传入一些参数
        JobDataMap jobDataMap = jobDetail.getJobDataMap();
        List<String> names = Arrays.asList(new String[]{"zs","ls","ww"});
        jobDataMap.put("infos",names);

        //触发器:时间规则,依赖2个对象(TriggerBuilder,Scheduel)
        TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger();
        triggerTriggerBuilder = triggerTriggerBuilder.withIdentity("meeting trigger", "group1");
        triggerTriggerBuilder.startNow();//当满足条件时 立即执行
        //下面的是给执行加一个时间限制
      /*   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date start=sdf.parse("2020-05-13 11:43:20");
        Date end = sdf.parse("2020-05-13 11:43:45");
       triggerTriggerBuilder.startAt(start);
        triggerTriggerBuilder.endAt(end);*/

        //ScheduelBuilder:定义执行的周期(时机)
//        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
//        scheduleBuilder.withIntervalInSeconds(1);//单位秒,每隔两秒执行一次
//        scheduleBuilder.withRepeatCount(10);//执行10+1次
//上面是简单触发器 下面的触发器  每分钟的5 10 20 30 35 秒都会执行
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("5,10,20,30,35 * * * * ? *");

        //产生触发器
       // SimpleTrigger trigger = triggerTriggerBuilder.withSchedule(scheduleBuilder).build();
        CronTrigger trigger = triggerTriggerBuilder.withSchedule(cronScheduleBuilder).build();

        //调度器(工厂产生调度器)
        SchedulerFactory factory = new StdSchedulerFactory();
        //产生调度器
        Scheduler scheduler = factory.getScheduler();

        //通过 调度器将 任务 和 触发器一一对应
        scheduler.scheduleJob(jobDetail,trigger);
        scheduler.start();
//        Thread.sleep(10000);
//        scheduler.shutdown();
        //scheduler.shutdown(false):跟上面一样都是 立即关闭
        //scheduler.shutdown(true):将当前任务执行完毕后 再关闭


    }
}

上面的CronScheduleBuilder的cronSchedule方法括号里面写的是cron表达式

Quartz框架详解_第2张图片
Quartz框架详解_第3张图片

Quartz框架详解_第4张图片

你可能感兴趣的:(javaweb,quartz)