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:

  1. group是用来标记、方便管理的
  2. name是用来标记的

项目较小时可以不传group,会分配一个DEFAULT_GROUP=DEFAULT

一般按照这种模式:

image

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

posted @ 2023-01-07 15:32  godslamn  阅读(37)  评论(0)    收藏  举报