01-quartz触发器
触发器
package com.yzw;
import org.junit.jupiter.api.Test;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.concurrent.TimeUnit;
@SpringBootTest
public class QuartzTest {
@Test
public void test01() {
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
JobDetail job = JobBuilder.newJob(HelloJob.class)
.withIdentity("job1", "group1")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1)
.repeatForever())
.build();
Trigger trigger2 = TriggerBuilder.newTrigger()
.withIdentity("trigger2", "group1")
// 使用group和name关联job
// 前提:job已经存在
// job不存在可以用scheduler.addJob(job);这种方式关联scheduler和job
.forJob("job1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(3)
.repeatForever())
.build();
scheduler.scheduleJob(job, trigger);
scheduler.scheduleJob(trigger2);
TimeUnit.SECONDS.sleep(3);
scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
结果:
==============HelloJob.execute trigger1 Sat Jan 07 10:45:39 CST 2023
==============HelloJob.execute trigger2 Sat Jan 07 10:45:39 CST 2023
==============HelloJob.execute trigger1 Sat Jan 07 10:45:40 CST 2023
==============HelloJob.execute trigger1 Sat Jan 07 10:45:41 CST 2023
==============HelloJob.execute trigger1 Sat Jan 07 10:45:42 CST 2023
==============HelloJob.execute trigger2 Sat Jan 07 10:45:42 CST 2023
结论:一个调度器可以调度多个trigger
根据文档:
Triggers are the 'mechanism' by which Jobs are scheduled. Many Triggers can point to the same Job, but a single Trigger can only point to one Job.
多个trigger可以指向同一个job,但一个trigger只能指向一个job
关于JobDetail和Trigger的name和group:
- group是用来标记、方便管理的
- name是用来标记的
项目较小时可以不传group,会分配一个DEFAULT_GROUP=DEFAULT
一般按照这种模式:

两个触发器:自动和手动,手动是因为定时任务结束后还可能有需求手动触发任务

浙公网安备 33010602011771号