Quartz定时任务整理
2024-09-05 07:54:53
一、 介绍
Quartz是一个开源的定时任务调度框架,这里就不详细介绍了,我们直入主题
Quartz主要由三部分组成
- 任务:JobDetail
- 触发器:Trigger,(分两类:SimpleTrigger和常用的CronTrigger)
- 调度器:Scheduler
主要流程:比较简单: 先有JobDetail 装载定时任务类(需要实现Job接口),然后设置触发规则(如:cron表达式)来告知任务该按照什么样的规则执行,最后将两者放到调度器中,由调度器统一执行调度, 调度器主要是负责,任务的启动、暂停、恢复、修改、删除、添加等操作。
二、 代码
定时任务类:
import org.quartz.*;
import java.time.LocalDateTime;
/**
* @author guochunyun
* @date 2019-12-18 下午 7:53
*/
public class HelloJop implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobKey key = context.getJobDetail().getKey();
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("jobDetail: " + key.getName() + " : " + key.getGroup() + " trigger: " + trkey.getName() + " : " + trkey.getGroup());
//获取jobDetail配置中自定义信息
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
//获取Trigger配置中自定义信息
JobDataMap trDataMap = context.getTrigger().getJobDataMap();
System.out.println("jobDetail: " + jobDataMap.get("message") + " " + jobDataMap.get("floatJobValue") + "trigger: " + trDataMap.get("message") + " " + trDataMap.get("doubleTriggerValue"));
System.out.println("============> hello world! " + LocalDateTime.now());
}
}
配置类:
mport org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
/**
* @author guochunyun
* @date 2019-12-18 下午 7:55
*/
public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
//创建一个jobDetail实例,将该实例与HelloJob 绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJop.class)
.withIdentity("myJob", "group")
//以下两个配置可以将自定义的map 传递到任务当中
.usingJobData("message", "hello myJob")
.usingJobData("floatJobValue", 3.14)
.build();
//创建一个CronTrigger实例, 每隔五秒重复执行一次
CronTrigger trigger = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group")
//以下两个配置可以将自定义的map 传递到任务当中
.usingJobData("message", "hello myTrigger")
.usingJobData("doubleTriggerValue", 3.1415926D)
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
//创建Scheduler实例,
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
//启动定时任务
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
//创建jobKey
JobKey jobKey = new JobKey("myJob", "group");
//创建TriggerKey
TriggerKey triggerKey = new TriggerKey("myTrigger", "group");
try {
//todo 特别注意此暂停只是调用暂停方法之后,任务不在执行, 等到执行恢复函数的时候 暂停时间内的任务会一次性全执行
//15秒后暂停定时任务
Thread.sleep(15000);
scheduler.pauseJob(jobKey);
System.out.println("===================");
//再等待15秒后开启定时任务
Thread.sleep(15000);
scheduler.resumeJob(jobKey);
System.out.println("==================");
//修改定时任务
CronTrigger trigger1 = (CronTrigger) TriggerBuilder.newTrigger().withIdentity("myTrigger", "group")
.usingJobData("message", "hello myTrigger")
.usingJobData("doubleTriggerValue", 3.1415926D)
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
.build();
Date date = scheduler.rescheduleJob(triggerKey, trigger1);
System.out.println("-----------------" + date);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
三、 我的组件
封装成springboot组件, 直接使用@QuartzJob注解并实现Job接口即可
组件地址
最新文章
- 使用Xamarin开发iOS7应用时隐藏StatusBar方法
- Linux学习总结
- setTimeout,clearTimeout和setInterval
- Google Code Jam 2009 Qualification Round Problem C. Welcome to Code Jam
- Struts2 - 传值
- [转] Java中的容器
- C++简介
- [转载] python利用psutil遍历进程名字和exe所在目录
- ==和equals()的区别
- flask-form用户登录与注册
- className.class.getResourceAsStream与ClassLoader.getSystemResourceAsStream区别
- 【转】javascript 作用域链
- 更新mysql驱动5.1-47 Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEY
- SQL的优化整理
- c#函数地址传入c++
- tidb 架构 ~Tidb学习系列(2)
- windows共享文件分析
- 前端开发——HTML学习笔记
- Docker常用命令学习
- Mac上反编译Android apk安装包