基本概念

  • Quartz 是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。
  • Quartz 可以与J2EE 与 J2SE 应用程序相结合也可以单独使用。
  • Quartz 允许程序开发人员根据时间的间隔来调度作业。
  • Quartz 实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

Quartz 核心概念

  1. Job表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:

    1. void execute(JobExecutionContext context);
  2. JobDetail表示一个具体之可行的调度程序,Job是这个可执行调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。

  3. Trigger代表一个调度参数的配置,什么时候去调。
  4. Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。

Quartz 简单使用

新建一个Spring Boot工程,添加Quartz Scheduler依赖。

  1. import org.quartz.*;
  2. import org.quartz.impl.StdSchedulerFactory;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
  6. public class QuartzTest implements Job {
  7. public static void main(String[] args) {
  8. try {
  9. // 创建一个scheduler(调度器)
  10. Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  11. // 启动scheduler
  12. scheduler.start();
  13. // 创建一个Job
  14. JobDetail job = JobBuilder.newJob(QuartzTest.class)
  15. .withIdentity("job1", "group1")
  16. .build();
  17. // 创建一个Trigger,每2秒执行1次
  18. Trigger trigger = TriggerBuilder.newTrigger()
  19. .withIdentity("trigger1", "group1")
  20. .startNow()
  21. .withSchedule(simpleSchedule()
  22. .withIntervalInSeconds(2)
  23. .repeatForever())
  24. .build();
  25. // Tell quartz to schedule the job using our trigger
  26. scheduler.scheduleJob(job, trigger);
  27. Thread.sleep(20000);
  28. // 关闭scheduler
  29. scheduler.shutdown();
  30. } catch (SchedulerException | InterruptedException se) {
  31. se.printStackTrace();
  32. }
  33. }
  34. public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
  35. // 线程不安全
  36. System.out.println("QuartzTest.excute " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\t\t" + Thread.currentThread().getName());
  37. }
  38. }

执行结果:
image.png