Springboot实现定时器quartz中文说明

本文介绍了在企业开发中如何使用Quartz实现定时任务,详细讲解了Quartz的核心概念,如Job、JobDetail、Trigger和Scheduler。通过示例展示了如何实例化和启动Scheduler,以及如何创建和配置Job和Trigger。此外,还提到了Quartz的集群和并发控制特性,以及相关的API使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:
定时任务,在企业开发中尤其重要,很多业务都是需要定时任务去做的。比如说10点开售某件东西,凌晨0点统计注册人数,统计其他各种等等。这个时候不可能说让人为的去开启某个开关或者怎么怎么样的,如果这样的话,估计都要崩溃了。今天给大家介绍如何在项目中使用Quartz并且在后台动态配置定时任务的启动,暂停,重启,停止,还有修改启动的时间,修改执行的任务等。

你想要的官方文档都有介绍:
http://www.quartz-scheduler.org/api/2.4.0-SNAPSHOT/index.html
正则、实现说明统统都有等。
这里有你需要的各种配置方式:https://www.w3cschool.cn/quartz_doc/。(配置内容不搬运过来)
这里特别说明以下都是参考至这里。

我们需要明白 Quartz 的几个核心概念,这样理解起 Quartz 的原理就会变得简单了。
1,Job 表示一个工作,要执行的具体内容。此接口中只有一个方法
2,JobDetail 表示一个具体的可执行的调度程序,Job 是这个可执行程调度程序所要执行的内容,另外 JobDetail 还包含了这个任务调度的方案和策略。
3,Trigger 代表一个调度参数的配置,什么时候去调。
4,Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。

一,在使用Scheduler之前,需要实例化(这点你是否知道)。
scheduler实例化后,可以启动(start)、暂停(stand-by)、停止(shutdown)。注意:scheduler被停止后,除非重新实例化,否则不能重新启动;只有当scheduler启动后,即使处于暂停状态也不行,trigger才会被触发(job才会被执行)。

下面的代码片段,实例化并启动一个scheduler,调度执行一个job:

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();

Scheduler sched = schedFact.getScheduler();

sched.start();

 // define the job and tie it to our HelloJob class
 JobDetail job = newJob(HelloJob.class)
  .withIdentity("myJob", "group1")
  .build();

 // Trigger the job to run now, and then every 40 seconds
  Trigger trigger = newTrigger()
  .withIdentity("myTrigger", "group1")
  .startNow()
  .withSchedule(simpleSchedule()
      .withIntervalInSeconds(40)
      .repeatForever())
  .build();

  // Tell quartz to schedule the job using our trigger
  sched.scheduleJob(job, trigger);

二,Quartz API,Jobs和Triggers
Quartz API的关键接口是:
Scheduler - 与调度程序交互的主要API。
Job - 由希望由调度程序执行的组件实现的接口。
JobDetail - 用于定义作业的实例。
Trigger(即触发器) - 定义执行给定作业的计划的组件。
JobBuilder - 用于定义/构建JobDetail实例,用于定义作业的实例。
TriggerBuilder - 用于定义/构建触发器实例。
Scheduler的生命期,从SchedulerFactory创建它时开始,到Scheduler调用shutdown()方法时结束;Scheduler被创建后,可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,才会真正地触发trigger(即执行job),见教程一。

Quartz提供的“builder”类,可以认为是一种领域特定语言(DSL,Domain Specific Language)。教程一中有相关示例,这里是其中的代码片段:(校对注:这种级联的API非常方便用户使用,大家以后写对外接口时也可以使用这种方式,这种方式前面我已经介绍过了)

// define the job and tie it to our HelloJob class
 JobDetail job = newJob(HelloJob.class)
  .withIdentity("myJob", "group1") // name "myJob", group "group1"
  .build();

 // Trigger the job to run now, and then every 40 seconds
 Trigger trigger = newTrigger()
  .withIdentity("myTrigger", "group1")
  .startNow()
  .withSchedule(simpleSchedule()
      .withIntervalInSeconds(40)
      .repeatForever())            
  .build();

 // Tell quartz to schedule the job using our trigger
 sch
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值