Quartz定时任务整理
一、 介绍
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接口即可
组件地址
Quartz定时任务整理的更多相关文章
- 搭建maven web项目并配置quartz定时任务【业务:对比数据变化内容】 历程
搭建maven web项目并配置quartz定时任务[业务:对比数据变化内容] 历程2018年03月03日 10:51:10 守望dfdfdf 阅读数:100更多个人分类: 工作 问题编辑版权声明:本 ...
- Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar
web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...
- quartz定时任务框架的使用
quartz定时任务时间设置 这些星号由左到右按顺序代表 : * * * * * * * ...
- Quartz定时任务学习(二)web应用
web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...
- Quartz定时任务使用小记(11月22日)
骤然接触quartz,先从小处着手,why,what,how quartz定时任务: 为什么使用quartz定时任务,以及定时任务在实际应用场景下的特定需求. 1.用户方面的需要,为了提供更好的使用体 ...
- quartz定时任务时间配置
quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记 这些星号由左到右按顺序代表 : * * * ...
- 对quartz定时任务的初步认识
已经好久没有写技术博文了,今天就谈一谈我前两天自学的quartz定时任务吧,我对quartz定时任务的理解,就是可以设定一个时间,然后呢,在这个时间到的时候,去执行业务逻辑,这是我的简单理解,接下来看 ...
- Spring整合Quartz定时任务执行2次,Spring定时任务执行2次
Spring整合Quartz定时任务执行2次,Spring定时任务执行2次 >>>>>>>>>>>>>>>&g ...
- Quartz 定时任务时间设置
转自https://blog.csdn.net/zdx1515888659/article/details/79158169 quartz定时任务时间设置: 这些星号由左到右按顺序代表 : * * * ...
随机推荐
- 2019-7-29-WPF-元素裁剪-Clip-属性
title author date CreateTime categories WPF 元素裁剪 Clip 属性 lindexi 2019-7-29 10:0:13 +0800 2019-1-3 15 ...
- linux如何查看nginx是否启动
Nginx是一个高性能的反向代理服务器,现在一般作为我们网站或其他Web服务的第一层代理,用户在浏览器请求首先经过的就是Nginx服务. 如果Nginx服务没有启动或异常结束,将会影响Web服务的正常 ...
- Python--day43--连表查询(重要)
- 洛谷4139 bzoj 3884 上帝与集合的正确用法
传送门 •题意 求$2^{2^{2^{2^{2^{2^{...^{2}}}}}}}$ (无穷个2) 对p取模的值 •思路 设答案为f(p) $2^{2^{2^{2^{2^{2^{...^{2}}}}} ...
- JAVA兼职架构师
在一些小企业或者公司人力不足的时候,经常会出现一个人干多个人的活.开发可能会干架构.测试.运维,一些小项目可能需要一个人完成.我把这些角色合并在一起称之为兼职架构师. 我用我的经历来说说兼职架构师的需 ...
- Elasticsearch慢查询故障诊断
最近在做ES搜索调优,看了一些lucene搜索的文档和代码,本文用于总结调优过程中学到的知识和自己的思考. 在抓到ES慢查询之后,会通过profile或者kibana的Search Profiler ...
- Memcahced 缓存过期时间问题
转载:https://help.aliyun.com/knowledge_detail/38654.html 关于设置缓存数据的过期时间,可以参考以下Memcached官方说明: An expirat ...
- 【软帝学院】女生不适合学习java?其实女生学java更有优势,更好就业!
女生适合学java吗?女生做IT怎么样 首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说,我觉得这是一种偏见. 不少人潜意识里认为女生不适合从事IT开发岗位的工作,因为他们 ...
- 驾驭git merge——git merge的规范化操作
这两天负责将一个开发了较长时间,代码量数万行的C语言项目(A项目)的代码分支合并到主线.由于之前参与过一些其他项目分支收编时采用git merge引入问题的修改,个人从心理上对git merge有所抵 ...
- 算法复杂度之 空间复杂度(Java)
0.说明 根据算法书上的定义,一个算法的空间复杂度包括算法程序所占用的空间,输入初始数据所占用的空间以及算法执行过程中所需要的额外空间.本文各种结论全部参考过标准文献,本人也进行过验证.验证过程本文不 ...