Quartz与Trigger初探

任务调度概述:
在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情。
核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作;
任务调度涉及多线程并发、线程池维护、运行时间规则解析、运行现场的保护以恢复等方面。

Quartz框架是一个开源的企业级任务调度服务,已经被作为任务调度的良好解决方案。

Quartz框架核心概念:
对任务调度进行了高度抽象,提出3个核心概念,并在org.quartz包通过接口和类进行描述

  • 任务:执行的工作内容,Quartz提供Job接口来支持任务定义;
  • 触发器:定义触发Job执行的时间触发规则,Quartz提供Trigger类及其子类支持触发器功能;
  • 调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行。

**SimpleTrigger:**通过设置触发器的属性:开始时间、结束时间、重复次数、重复间隔等;
**CronTrigger:**通过Cron表达式定义准确的运行时间点。
CronTrigger cronTrig=new CronTrigger(“触发器名”,”组名”,”Crom表达式”);

**Cron表达式:*由6-7个由空格间隔元素组成,第7个元素可选。
这里写图片描述
Cron 表达式的每个字段,都可以显式规定一个值、范围、列表或者一个

  • -:中划线,表示范围;
  • ,:逗号间隔数据,表示一个列表;
  • *:表示任意值,可以用于所有字段;
  • ?:仅用于“月份中的哪一天”和“星期几”字段,表示不指定值;
  • /:x/y,x为起始值,y为增量;
  • L:表示最后一天,仅在“日期”和“星期”字段;
  • #:只能用于“星期几”字段,表示这个月的第几个周几。“6#3”指这个月第三个周五。

在这里插入图片描述

QuartzTrigger 类是调度任务执行时间的关键组件之一。在 Quartz 中,`org.quartz.NthIncludedDayTrigger` 特别用于指定每隔特定天数运行某个作业(Job)的触发器。这个类允许你在特定的周期内选择某一天作为作业的执行日。 下面是一个简单的示例,展示了如何创建一个 `NthIncludedDayTrigger`: ```java // 引入所需的包 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.text.SimpleDateFormat; import java.util.Date; // 定义具体的间隔(比如每周一) int nthDay = 1; // 第一天 String dayOfWeek = "Monday"; // 周一 // 创建日期格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); // 获取当前日期 Date currentDate = new Date(); String currentDateString = sdf.format(currentDate); // 计算下一次满足条件的日期 Date nextExecutionDate = getNthDayAfter(currentDate, nthDay, dayOfWeek); // 创建 NthIncludedDayTrigger NthIncludedDayTrigger trigger = new NthIncludedDayTrigger(); trigger.setRepeatCount(Trigger.REPEAT_INDEFINITELY); // 设置无限循环 trigger.setStartAt(nextExecutionDate); // 设置首次执行时间 trigger.setNextFireTime(nextExecutionDate); trigger.setIntervalInMilliseconds(1000 * 60 * 60 * 24); // 每周一次,单位毫秒 trigger.setNthWeekday(nthDay); // 设置为周一 trigger.setFirstDayOfWeek(DayOfWeek.MONDAY); // 配合 nthDay 使用 // 启动 Quartz 安排器并设置触发器 StdSchedulerFactory schedulerFactory = new StdSchedulerFactory(); Scheduler scheduler = schedulerFactory.getScheduler(); scheduler.start(); // 添加触发器到调度器 scheduler.scheduleJob(trigger, new JobDetail()); ``` 在这个示例中,我们首先计算出下次满足条件的日期(即下周一),然后创建一个 `NthIncludedDayTrigger` 并设置其属性。最后,我们将触发器添加到 Quartz 调度器中以安排任务执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值