Quartz定时任务浅谈

Quartz通过Scheduler和Trigger实现任务调度,Scheduler管理Trigger执行,Trigger定义任务执行时间。触发器包含StartTime、EndTime、RepeatCount和RepeatInterval属性。Quartz使用@DisallowConcurrentExecution注解防止同一任务并发执行,保证任务顺序和完整性。
摘要由CSDN通过智能技术生成

Quartz定时任务并发控制浅谈

1.调度器和触发器

在定时任务中,调度器(Scheduler)和触发器(Trigger)是两个重要的概念,它们协同工作来实现定时任务的调度和执行。

  1. 调度器(Scheduler):负责协调和控制所有的触发器(Trigger)的执行。Scheduler 可以启动、暂停、恢复和停止触发器的执行,并管理任务的线程池,为每个任务提供一个独立的线程。
  2. 触发器(Trigger):触发器是定时任务的核心组件,它指定了任务应该在何时执行。Quartz 提供了多种类型的触发器,包括简单触发器(SimpleTrigger)、Cron 触发器(CronTrigger)、日历触发器(CalendarIntervalTrigger)等。

触发器有以下几个重要属性:

  • 调度时间(Start Time):指定任务的开始执行时间。
  • 结束时间(End Time):指定任务的结束执行时间。
  • 执行次数(Repeat Count):指定任务的执行次数。
  • 执行间隔(Repeat Interval):指定任务的执行间隔时间。

在使用 Quartz 进行定时任务调度时,一般需要通过编写 Job 类来实现具体的任务逻辑。Scheduler 将 JobDetail 和 Trigger 关联起来,并在触发时间到达时执行 Job。

总的来说,调度器和触发器是定时任务调度的核心组件,通过它们可以实现灵活、高效的定时任务调度。

2.并发/禁止并发控制

Quasrtz是通过@DisallowConcurrentExecution注解实现禁止并发的,这里指的是同一任务如果没执行完,则下一个任务不会开始。

原理如下:

  1. 当调度程序触发一个 Job 时,Quartz 会先获取一个的 Scheduler 实例。

  2. 如果 Job 上标注了 @DisallowConcurrentExecution 注解,则该 Job 类会被实例化为 Quartz 中的 JobDetail 对象,并且将其持久化到 Quartz 的数据库中。

  3. 然后,Quartz 会将该 JobDetail 对象分配给一个可用的 Trigger(触发器),并将其添加到调度程序的工作队列中。

  4. 如果该 Job 在执行期间被其他 Trigger 触发,则在 Job 正在执行时,Quartz 将不会重新启动该 Job 的另一个实例。当 Job 执行完毕时,Quartz 才会再次启动一个新的 Job 实例。

总的来说,@DisallowConcurrentExecution 注解通过限制同一时间只能有一个实例在执行,保证了 Job 的顺序性和完整性,避免了并发执行导致的数据错误和系统性能问题。

简单概括一下:@DisallowConcurrentExecution就是通过注解设置不同的jobclass,在Job并发执行时通过jobclass判断是两个触发器并发执行还是一个触发器等待执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值