0
点赞
收藏
分享

微信扫一扫

Quartz.基本使用

干自闭 2022-02-11 阅读 101

一、定时任务

在很多情况下任务并非需要立即执行 , 而是需要往后或定期执行 , 这不可能人工去操作 , 所以定时任务就出现了

1、Scheduled创建定时任务

①、在SpringBoot的启动类类中加⼊ @EnableScheduling 注解,启⽤定时任务的配置

 ②、创建定时任务实现类

package com.mwy.code;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
@Slf4j
public class Task {

    @Scheduled(fixedRate = 2000)
    public void work() {
        log.warn("现在时间:" + LocalDateTime.now());
    }
}

测试:

 测试类测试只能执行一次,使用死循环执行多次

二、Quartz创建定时任务

1、导入pom依赖

2、内存方式:

①、实例化调度器工厂:

StdSchedulerFactory:可读取配置文件

②、得到调度器

Scheduler 维护了一个 JobDetails(任务) 和 Triggers(触发时间)  的注册表

③、创建一个任务类MyJob,实现job接口成为一个任务,实现方法

任务是一个实现 org.quartz.Job 接口的类,任务类必须含有空构造器

当关联这个任务实例的触发器表明的执行时间到了的时候,调度程序 Scheduler 会调用这个方法来执行 任务,任务内容就可以在这个方法中执行

JobDataMap 提供了一种 初始化成员属性数据的机制 ”, 在实现该 Job 接口的时候可以取到需要的数据

context.getJobDetail().getKey() = name + group  

④、创建触发器

触发器使用 TriggerBuilder 来实例化,有一个 TriggerKey 关联,在一个 Scheduler 中必须是唯一的。

多个触发器可以指向同一个工作,但一个触发器只能指向一个工作。

触发器可以传送数据给 job ,通过将数据放进触发器的 JobDataMap

如果没有使用 withIdentity(..) 会自动生成一个触发器名称。

⑤、将触发器和任务绑定到调度器

⑥、启动调度器

⑦、测试结果

3、 job和jobDetail的区别

job是任务模板,jobDetail是实例

①、创建两个jobDetail实例 ,usingJobData不同

 ②、在任务模板中获取到name属性(MyJob)

package com.mwy.code;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@Slf4j
public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        Object name= context.getJobDetail().getJobDataMap().get("name");
        log.warn(name+"写作业");
    }
}

运行结果:

 如果想要放入很多数据,可以用JobDataMap集合 

③、设置时间以及执行次数

SimpleTrigger 特点:开始时间、结束时间、重复次数以及重复执行的时间间隔。

Cron生成器 :   http://cron.ciding.cc/

 基于 Cron 表达式的触发器 CronTrigger

举报

相关推荐

0 条评论