3、测试类
Quartz01ApplicationTests:
package com.lv.code;
import org.junit.jupiter.api.Test;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
@SpringBootTest
class Quartz01ApplicationTests {
@Test
void contextLoads() throws Exception{
// 1、实例化调度器工厂
SchedulerFactory factory=new StdSchedulerFactory();
// 2、得到调度器
Scheduler scheduler = factory.getScheduler();
// 3、创建任务 newJob为静态方法,按住Alt+Enter,选择导入static方法
JobDetail jobDetail = newJob(MyJob.class)
// 描述
.withDescription(“开年大扫除”)
// 定义任务的主键:context.getJobDetail().getKey() = name + group,在同样的分组不能出现相同的名字,不同的名字则可以
.withIdentity(“大扫除”, “厕所”)
.usingJobData(“name”, “王阿姨”)
// 同样可以用集合
// JobDataMap jobDataMap=jobDetail.getJobDataMap();
// jobDataMap.put(“name”,“xx”);
// 构建出来,一定要写
.build();
// 4、创建触发器
Trigger trigger = TriggerBuilder.newTrigger()
.withDescription(“大扫除触发器”)
.withIdentity(“大扫除”, “厕所”)
.startAt(new Date())
// .withSchedule(
// simpleSchedule()
// .withIntervalInSeconds(10)
重复次数
// .withRepeatCount(10) //SimpleTrigger.REPEAT_INDEFINITELY
// )
// 基于 Cron 表达式的触发器 CronTrigger
.withSchedule(
CronScheduleBuilder.cronSchedule(“* * * * * ?”)
)
.build();
// 5、将触发器和任务绑定到调度器
scheduler.scheduleJob(jobDetail, trigger);
// 6、启动调度器
scheduler.start();
}
}
Scheduler 调度器:
用于与调度程序交互的主程序接口.
Scheduler维护了一个JobDetails和Triggers 的注册表。
一旦在Scheduler注册过了,当定时任务触发时间一到,调度程序就会负责执行预先定义的Job
调度程序创建之后,处于“待机”状态,必须调用 scheduler 的 start() 方法启用调度程序
可以使用 shutdown() 方法关闭调度程序,使用 isShutdown() 方法判断该调度程序是否已经处于关闭状态
通过 Scheduler.scheduleJob(…) 方法将任务纳入调度程序中,当任务触发时间到了的时候,该任务将被执行
实例化过程:
创建一个 Job 类,在调度程序中可以创建很多个 JobDetai,分别设置不同的 JobDataMap,JobBuilder 用于创建 JobDetail,如果没有调用 withIdentity 指定 job 的名字,会自动生成一个。
Trigger 触发器:
触发器使用 TriggerBuilder 来实例化,有一个 TriggerKey 关联,在一个 Scheduler 中必须是唯一的。多个触发器可以指向同一个工作,但一个触发器只能指向一个工作。
触发器可以传送数据给 job,通过将数据放进触发器的 JobDataMap。
触发器常用属性:
触发器也有很多属性,这些属性都是在使用 TriggerBuilder 定义触发器时设置的。
TriggerKey,唯一标识,在一个 Scheduler 中必须是唯一的
startTime,开始时间,通常使用 startAt(java.util.Date)
endTime,结束时间,设置了结束时间则在这之后,不再触发, 如果没有使用 withIdentity(…) 会自动生成一个触发器名称。
触发器的优先级:
有时候,会安排很多任务,但是 Quartz 并没有更多的资源去处理它。
这种情况下,必须需要很好地控制哪个任务先执行。这时候可以设置 priority 属性(使用方法
withPriority(int))来控制触发器的优先级。优先级只有触发器出发时间一样的时候才有意义。当一个任务请求恢复执行时,它的优先级和原始优先级是一样的。
常见触发器:
TriggerBuilder 用于创建 Trigger,如果没有调用 withSchedule(…) 方法,会使用默认的schedule 。
简单触发器 SimpleTrigger
SimpleTrigger 包含几个特点:开始时间、结束时间、重复次数以及重复执行的时间间隔。
基于 Cron 表达式的触发器 CronTrigger:
.withSchedule(CronScheduleBuilder.cronSchedule(“2 * * * * *”))
4、Job 定时任务
任务是一个实现 org.quartz.Job 接口的类,任务类必须含有空构造器
当关联这个任务实例的触发器表明的执行时间到了的时候,调度程序 Scheduler 会调用这个方法来执行任务,任务内容就可以在这个方法中执行
新建Task 类:
package com.lv.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(cron = “10 10 * * * ?”)
public void test(){
log.warn(“现在时间:” + LocalDateTime.now());
}
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。






既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)

总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

并且后续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-igGErGve-1711715883714)]
总结
我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。
面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!
[外链图片转存中…(img-WVc5pHbG-1711715883715)]
本文详细介绍了如何在SpringBoot项目中使用Quartz框架进行任务调度,包括Job和Trigger的实例化、配置、绑定和启动,以及CronTrigger的使用。
2万+

被折叠的 条评论
为什么被折叠?



