目录
目录
一、引言
Quartz是一个定时任务调度框架。
二、基本使用
1、导入依赖
<!-- 导入定时任务调度框架Quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
2、定义一个工作类(也就是要定时执行的任务)
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//jobExecutionContext内有getJobDetail
JobDetail jobDetail = jobExecutionContext.getJobDetail();
System.out.println(jobDetail.getKey().getName());
System.out.println(jobDetail.getKey().getGroup());
// 要执行的任务
System.out.println("执行的任务!");
}
}
3、编写主函数进行测试
public class TestQuartz {
public static void main(String[] args) {
try {
//创建调度器
Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
//定义触发条件
SimpleTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1) //执行时间间隔
.repeatForever()) //总是执行下去
.endAt(new GregorianCalendar(2022, 4, 29, 16, 10, 0).getTime())
.build();
//定义工作
JobDetail jobDetail = JobBuilder.newJob(TestJob.class)
.withIdentity("job1", "group1")
.build();
//在调度器中将触发条件和工作都添加进去
defaultScheduler.scheduleJob(jobDetail,trigger);
//启动任务调度
defaultScheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
4、Quzrtz的配置
请查看后续更新。。。
5、主要类说明
Scheduler:调度器。
Job:任务。执行的任务继承它,重写里面的方法。
JobDetail:基于Job进一步包装的类。
Trigger:触发器。
三、触发器种类
1、SimpleTrigger
定义开始时间,中间定义执行次数、时间间隔等信息,结束时间。
SimpleTrigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1) //执行时间间隔
.repeatForever()) //总是执行下去
.endAt(new GregorianCalendar(2022, 4, 29, 16, 10, 0).getTime())
.build();
2、CronTrigger
利用cron表达式设置触发机制。(具体Cron表达式含义见下节)
4月29日,每秒执行一次。
CronTrigger build = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("* * * 29 4 ?"))
.build();
四、Cron表达式
表达式由(秒 、分、时、日、月、周、【年】)其中年可写可不写。
特殊符号含义:
* (星号) 表示所有。
? (问号) 表示不确定的值
- (减号) 表示范围, 如6-10
, (逗号) 表示几个值,如星期内 MON,WED,FRI。
/ (斜杠) 表示步长 间隔多长时间,如在分钟内 */2 表示每两分钟。
# (井号) 只用于周字段内,5#1代表第一个星期四,3#2代表第二个星期二。
。。。