java定时任务工具详解之Quartz

发布时间:2025-12-09 16:54:13 浏览次数:4

Quartz简介
特点:

  • 强大的调度功能
  • 灵活的应用方式
  • 分布式和集群能力

主要用到的设计模式

  • Builder模式
  • Factory模式
  • 组件模式
  • 链式写法

三个核心概念

  • 调度器
  • 任务
  • 触发器
  • 从Map中直接获取
    代码演示:

  • public class Test {public static void main(String[] args) throws SchedulerException {//创建一个JobDetail实例,将该实例与helloJob类绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).usingJobData("message","No1").usingJobData("float",3.14F).withIdentity("myJob", "group1").build();//创建一个Trigger实例,定义该Job立即执行,并且每隔两秒重复执行一次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message","No2").usingJobData("Float",4.3F).startNow().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();//创建一个Scheduler实例StdSchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();scheduler.start();//打印当前时间Date date = new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("第一次时间为"+sf.format(date));scheduler.scheduleJob(jobDetail,trigger);}} public class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {//执行重复的业务方法'Date date = new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("时间为"+sf.format(date));JobKey key = context.getJobDetail().getKey();System.out.println("name"+key.getName());System.out.println("group"+key.getGroup());JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();JobDataMap triggerDataMap = context.getTrigger().getJobDataMap();System.out.println(jobDataMap.getString("message"));System.out.println(jobDataMap.getFloat("float"));System.out.println(triggerDataMap.getString("message"));System.out.println(triggerDataMap.getFloat("Float"));}}
    • List item
      从成员变量中获取
      代码演示:
    public class HelloJob implements Job {private String message;private Float Myfloat;private Float ss;public Float getSs() {return ss;}public void setSs(Float ss) {this.ss = ss;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Float getMyfloat() {return Myfloat;}public void setMyfloat(Float myfloat) {Myfloat = myfloat;}@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {//执行重复的业务方法'Date date = new Date();SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("时间为"+sf.format(date));JobKey key = context.getJobDetail().getKey();System.out.println("name"+key.getName());System.out.println("group"+key.getGroup());System.out.println(message);System.out.println(ss);System.out.println(Myfloat);}}

    浅谈Trigger

    思考:Trigger是什么?
    Trigger是Quartz中的触发器,它是用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行Job的。

    触发器通用属性

    • jobKey
    • StartTime
    • EndTime

    SimpleTrigger

    作用:在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务
    需要注意的点:

    • 重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值、
    • 重复执行间隔必须为0或长整数
    • 一旦被指定了endTime参数,那么他会覆盖重复次数参数的效果
    public class Test {public static void main(String[] args) throws SchedulerException {//创建一个JobDetail实例,将该实例与helloJob类绑定JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).usingJobData("message", "No1").usingJobData("Myfloat", 3.14F).withIdentity("myJob", "group1").build();//打印当前时间Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("第一次时间为" + sf.format(date));Calendar calendar=new GregorianCalendar();calendar.setTime(date);calendar.add(Calendar.SECOND,2);//创建一个Trigger实例,定义该Job立即执行,并且每隔两秒重复执行一次SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").usingJobData("message", "No2").usingJobData("ss", 4.3F).startAt(calendar.getTime()).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).withRepeatCount(2)).build();//创建一个Scheduler实例StdSchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();scheduler.start();scheduler.scheduleJob(jobDetail, trigger);}}

    CronTrigger

    作业:基于日历的作业调度器,而不是像SimpleTrigger那样精确指定时间间隔,比SimpleTrigger更常用。
    cron表达式
    用于配置CronTrigger实例,是由7个子表达式组成的字符串,描述了时间表的详细信息
    格式:[秒][分][小时][日][月][周][年]

    • 所有的Scheduler实例应该由SchedulerFactory来创建的
      -

    StdSchedulerFactory

    • 使用一组参数来创建和初始化Quartz调度器
    • 配置参数一般存储在quartz.properties中
    • 调用getScheduler方法就能创建和初始化调度器对象

    注意:

    quartz.properties

    • 文档的位置和加载顺序
      首先会在本地找有没有这个配置文件,没有的话回去jar包里面去拿默认配置。

    • 组成部分:调度器属性、线程池属性、作业存储属性、插件配置



    需要做网站?需要网络推广?欢迎咨询客户经理 13272073477