quartz任务调度基础: Job/Trigger/Schedule
1、Quartz基本用法
参见官方说明:[Quartz Job Scheduler]
三大核心元素:
- Job:定义要执行的任务
- triggers:任务触发策略
- scheduler:关联job和trigger
1.1 调度器scheduler
scheduler的初始化和启动
// 工厂方式创建调度器实例Scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
...
scheduler.scheduleJob(job, trigger); //将任务与触发器关联起来
// 启动,开始调度
scheduler.start();
1.2 任务Jobs
实现Job,其中包含一个.execute()方法
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*; public class MyJob implements org.quartz.Job { public MyJob() {
}
// Quartz调度运行任务时,即执行execute()方法
public void execute(JobExecutionContext context) throws JobExecutionException {
System.err.println("Hello World! MyJob is executing.");
}
}
1.3 触发器triggers
通过trigger触发任务执行(triggers定义了job在什么时候运行。)
// 定义job,并与MyJob绑定。
JobDetail job = newJob(MyJob.class)
.withIdentity("job1", "group1")
.build(); // Trigger 触发job立即执行,并每隔40s重复一次。
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(40)
.repeatForever())
.build(); // 调度器用于将任务与触发器关联起来。(任务和触发器可以是多对多的关系,)
scheduler.scheduleJob(job, trigger);
2、 再举例
2.1 调度的任务JOB
(与上述Job类一致)
package com.mypractice.quartz; import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException {
SimpleDateFormat time=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dsc = context.getJobDetail().getDescription();
String name = context.getJobDetail().getJobDataMap().getString("name");
System.out.println(time.format(new java.util.Date()) +" hello, " + name + ". " + dsc + " ");
} }
2.2 可以添加trigger的监听(实现TriggerListener接口)
trigger的配置在上一部分已做描述,此处是添加了触发器的监听。
以下示例中,在触发执行完后做了打印输出。
package com.mypractice.quartz; import org.quartz.JobExecutionContext;
import org.quartz.Trigger;
import org.quartz.Trigger.CompletedExecutionInstruction;
import org.quartz.TriggerListener; public class myJobTriggerListener implements TriggerListener { public String getName() {
// TODO Auto-generated method stub
return "user_defined_Trigger";
} public void triggerFired(Trigger trigger, JobExecutionContext context) {
// TODO Auto-generated method stub } public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
// TODO Auto-generated method stub
return false;
} public void triggerMisfired(Trigger trigger) {
// TODO Auto-generated method stub } public void triggerComplete(Trigger trigger, JobExecutionContext context,
CompletedExecutionInstruction triggerInstructionCode) {
String name = context.getJobDetail().getJobDataMap().getString("name");
String dsc = context.getJobDetail().getDescription();
System.out.println("compelte " + name + " " +dsc);
}
}
2.3 整体测试代码
package com.mypractice.quartz; import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobListener;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class TestQuartzMain { public static void main(String[] args) throws SchedulerException {
//scheduler
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler sch = schedulerFactory.getScheduler(); //1. Job
//JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", HelloJob.class);
//(qurtz1.*版本之前是以上用法)
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("helloJob", "groupJob")//given name and group to identify the JobDetail.
.usingJobData("name", "孙悟空")//Add the given key-value pair to the JobDetail's
.withDescription("齐天大圣")
.build();
//2. trigger
Trigger trigger1 = TriggerBuilder.newTrigger()
.withIdentity("cron trigger", "groupTrigger")
.withSchedule(
//每5秒执行一次
CronScheduleBuilder.cronSchedule("0/5 * * ? * *")
).build();
// (附加) 加入triggerlistener。
sch.getListenerManager().addTriggerListener(new myJobTriggerListener());
//3. 把job、trigger注册到任务调度中
sch.scheduleJob(jobDetail, trigger1);
//4. 启动调度
sch.start();
}
}
输出
2017-05-25 01:05:00 hello, 孙悟空. 齐天大圣
compelte 孙悟空 齐天大圣
2017-05-25 01:05:05 hello, 孙悟空. 齐天大圣
compelte 孙悟空 齐天大圣
2017-05-25 01:05:10 hello, 孙悟空. 齐天大圣
...
quartz任务调度基础: Job/Trigger/Schedule的更多相关文章
- 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger
前序: 我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...
- Quartz任务调度快速入门
Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的 ...
- Quartz任务调度入门
Quartz任务调度入门 了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念 ...
- Quartz任务调度 服务日志+log4net打印日志+制作windows服务
引言 现在许多的项目都需要定时的服务进行支撑,而我们经常用到的定时服务就是Quartz任务调度了.不过我们在使用定时Job进行获取的时候,有时候我们就需要记录一下自定义的日志,甚至我们还会对执行定时J ...
- .net core中使用Quartz任务调度
使用xml配置Quartz任务调度程序 1.Nuget Install-Package Quartz Install-Package Quartz.Plugins 2.站点根目录下加入文件quartz ...
- Quartz 任务调度(转)
原文链接:http://lavasoft.blog.51cto.com/62575/93938 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Qu ...
- Quartz任务调度
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Quartz任务调度 课程目标 : 了解Quartz框架 : 任务(Job) 触发器(Trig ...
- Quartz任务调度实践
最近在写一个任务调度程序,需要每隔几秒查询数据库,并取出数据做一些处理操作.使用到了Quartz任务调度框架. 基本概念 Quartz包含几个重要的对象,分别为任务(Job),触发器(Trigger) ...
- Quartz教程四:Trigger
原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...
随机推荐
- 21-2-substring
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【笔记篇】斜率优化dp(三) APIO2010特别行动队
旁听了一波给舒老师和学弟的pkuwc面试讲座... 这里有一段隐身的吐槽, 想看的请自己想办法观看. 不想看的跳过这一段看似空白的东西就好了... 刚开始ATP学姐给我们讲了自己面试的时候的事情..描 ...
- rem换算公式
当前rem基准值=预设的基准值/设计稿宽度*当前设备的宽度
- [JZOJ3424] 【NOIP2013模拟】粉刷匠
题目 题目大意 有\(K\)种颜色的小球,每种颜色的小球有\(c_i\)个. 求相邻颜色不同的排列的方案数. \(K\leq 15\)且\(c_i\leq 6\) 思考历程&正解1 我是一个智 ...
- 校园商铺-2项目设计和框架搭建-8升级mysql驱动相关的配置以支持mysql8
1.如何升级驱动 1.1步骤: a 确保当前程序能正常访问数据库 b 更新mysql驱动重新运行程序进行校验 maven依赖https://mvnrepository.com/artifact/mys ...
- javascript和jquery
JavaScript 1.概述 JavaScript是一种基于对象和事件驱动,并具有安全性能的脚本语言. 2.语法 HTML 中的脚本必须位于 <script> 与 </script ...
- h5判断是否为iphonex
js移动端页面判断是否是iphoneX 转自https://blog.csdn.net/weixin_39924326/article/details/80352929 function isIPho ...
- 杂项-日志:日志(log)
ylbtech-杂项-日志:日志(log) 1.返回顶部 1. 概述 网络设备.系统及服务程序等,在运作时都会产生一个叫log的事件记录:每一行日志都记载着日期.时间.使用者及动作等相关操作的描述. ...
- System.DateTime.cs
ylbtech-System.DateTime.cs 1. 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5 ...
- System.Web.Mvc.IController.cs
ylbtech-System.Web.Mvc.IController.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Public ...