定时任务调度工具之Quartz

jdk中Timer的缺陷:
1、Timer有且仅有一个线程去执行定时任务,如果存在多个任务,且任务时间过长,会导致执行效果与预期不符。(不能实现并发)
2、如果TimerTask抛出RuntimeException,Timer会停止所有任务的执行。 Timer的使用禁区:
1、对时效性要求较高的多任务并发作业 2、对复杂任务的调度

Quartz 是功能强大的开源任务调度框架,弥补了Timer的不足。
特点:

  • 灵活可配置的调度功能,能很好的与spring集成;
  • 灵活的应用方式:允许灵活定义调度的时间表,并可以将触发器和任务进行关联映射;
  • 分布式和集群能力;

体系结构:(重点了解)

  • jobDetail
  • trigger (触发器)包括SimpleTriggle 和CronTrigger
  • scheduler

举个栗子:
首先要在pom.xml文件中加入依赖:

<dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
      <version>2.3.0</version>
    </dependency>
import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloJob implements Job{
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        Date execTime = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current exec time is:"+sf.format(execTime));
        System.out.println("HelloWorld");
    }
}
package com.imooc.quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.text.SimpleDateFormat;
import java.util.Date;

public class HelloScheduler {
    public static void main(String[] args) throws SchedulerException {
        //创建一个JobDetail实例,将该实例与HelloJob.class绑定
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                .withIdentity("myJob", "group1").build();
        //创建一个Triggle实例,定义job立即执行,并且每隔两秒重复执行一次
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(2).repeatForever())
                .build();
        //创建schedul实例
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();
        Date now = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("Current time is:"+sf.format(now));
        scheduler.scheduleJob(jobDetail, trigger);

    }
}

设计模式:

  • Builder模式、组建模式、Factory模式、链式写法

核心概念:

  • 调度器 :定时定频
  • 任务:业务逻辑
  • 触发器:生效的时间

重要组成:

  • Job
  • JobDetail
  • JobBuilder
  • JobStore
  • Trigger
  • TriggerBuilder
  • ThreadPool
  • Scheduler
  • calendar
  • 监听器

常用CronTrigger
Cron 表达式 秒 分 时 日 月 周 年
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/coder_16/article/details/80660972