Quartz之基本使用,mybatis原理面试题

本文详细介绍了如何在SpringBoot项目中使用Quartz框架进行任务调度,包括Job和Trigger的实例化、配置、绑定和启动,以及CronTrigger的使用。

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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-igGErGve-1711715883714)]

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。

面试题多多少少对于你接下来所要做的事肯定有点帮助,但我更希望你能透过面试题去总结自己的不足,以提高自己核心技术竞争力。每一次面试经历都是对你技术的扫盲,面试后的复盘总结效果是极好的!

[外链图片转存中…(img-WVc5pHbG-1711715883715)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值