Quartz框架

Q:什么是quartz?

A:Quartz是一个任务调度框架,主要包括3个部分。

  1. 任务(Job) : 需要实现的任务类,使用execute()方法
  2. 触发器(Trigger):常用 SimpleTrigger和CronTrigger
  3. 调度器(scheduler): 负责基于触发器来执行Job

任务是具体执行逻辑,触发器是执行时间和频率,调度器是规定任务绑定哪个触发器

快速入门

导包

<!--任务调度-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

配置yml

spring:
  quartz:
    # 存储类型 默认是内存 这里使用数据库存储
    job-store-type: jdbc
    jdbc:
      # 是否初始化数据库: 总是初始化
      initialize-schema: always

任务(Job)

以job结尾 实现Job接口

@Slf4j
@Component
public class CallMyGirlFriendsJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        //具体执行的内容
        log.info("啊你嘎多美羊羊");
    }
}

触发器(Trigger)

Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("girl", "call") //触发器的名称和分组
                //cron 11点到12点,每5秒执行一次
                .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * 11-12 * * ?"))
                .startNow() //立即触发
                .build();

调度器(scheduler)

  SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        // 获取调度器实例
        Scheduler scheduler = schedulerFactory.getScheduler();
        // JobDetail作业实例 JobBuilder 是哪个马楼被控制
        JobDetail jobDetail = JobBuilder.newJob(CallMyGirlFriendsJob.class)
                .withIdentity("schedulerName", "schedulerGroup")
                .build();// 设置作业名称和组
        // 创建一个触发器
        Trigger trigger = SimpleGetTrigger.createTrigger();
        // 添加作业和触发器 绑定    把马楼和上下班时间绑定
        scheduler.scheduleJob(jobDetail, trigger);
        // 启动调度器
        scheduler.start();