Quartz框架详解

Quartz框架可以实现 异步定时任务。Quartz框架下载地址
注意1版本和2版本写法完全不一样,本文采用的是2-x版本
下载完毕后进入进入lib文件夹,然后将下面的几个jar引入项目:
在这里插入图片描述
基本实现步骤:
发布任务,编写触发器,编写调度器
任务一般写在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表达式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。 Quartz的优势: 1、Quartz是一个任务调度框架(库),它几乎可以集成到任何应用系统中。 2、Quartz是非常灵活的,它让您能够以最“自然”的方式来编写您的项目的代码,实现您所期望的行为 3、Quartz是非常轻量级的,只需要非常少的配置 —— 它实际上可以被跳出框架来使用,如果你的需求是一些相对基本的简单的需求的话。 4、Quartz具有容错机制,并且可以在重启服务的时候持久化(”记忆”)你的定时任务,你的任务也不会丢失。 5、可以通过Quartz,封装成自己的分布式任务调度,实现强大的功能,成为自己的产品。6、有很多的互联网公司也都在使用Quartz。比如美团 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。   课程说明:在我们的日常开发中,各种大型系统的开发少不了任务调度,简单的单机任务调度已经满足不了我们的系统需求,复杂的任务会让程序猿头疼, 所以急需一套专门的框架帮助我们去管理定时任务,并且可以在多台机器去执行我们的任务,还要可以管理我们的分布式定时任务。本课程从Quartz框架讲起,由浅到深,从使用到结构分析,再到源码分析,深入解析Quartz、Spring+Quartz,并且会讲解相关原理, 让大家充分的理解这个框架框架的设计思想。由于互联网的复杂性,为了满足我们特定的需求,需要对Spring+Quartz进行二次开发,整个二次开发过程都会进行讲解。Spring被用在了越来越多的项目中, Quartz也被公认为是比较好用的定时器设置工具,学完这个课程后,不仅仅可以熟练掌握分布式定时任务,还可以深入理解大型框架的设计思想。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

键盘歌唱家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值