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感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...
随机推荐
- mysql tar安装模式
mysql解压版安装过程,之前安装mysql一直用linux yum和rpm方式.今天试了下tar包方式有点麻烦记录下1.安装lrzsz-0.12.20-27.1.el6.x86_64.rpm方便操作 ...
- mac os Catalina beta andriod studio crash
点击菜单 Help - Edit Custom VM Options 添加下面一行-Dsun.font.layoutengine=icu 然后我自己重启了好几下,然后 在重新创建一个新的工程,就好了 ...
- ionic js 侧栏菜单 把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换
ionic 侧栏菜单 一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示: 用法 要使用侧栏菜单,添加一个父元素<ion ...
- activemq设置后台管理用户名密码,及生产者消息密码
activemq设置后台管理用户名密码,及生产者消息密码 1.修改conf/activemq.xml 在<broker>标签下,找到</shutdownHooks>标签.在这个 ...
- hdu6393 Traffic Network in Numazu 树链剖分
题目传送门 题意:给出n个点n条边的无向带权图,再给出两种操作,操作1是将第x条边的边权修改为y,操作2是询问点x到点y的最短路径. 思路:如果是n个点n-1条边,题目就变成了树,修改边权和询问最短路 ...
- mysql-connetor-c 自动创建数据库、数据库表的命令
1.首先连接MySQL默认的数据库mysql // 参数说明: // strIP: MySQL数据库的IP地址 // nPort: MySQL数据库的端口号 // strDBName: 要连接的数据库 ...
- RAKsmart服务器受消费者青睐的原因
随着互联网的快速发展,网站建设变得越来越重要,现在很多做外贸网站的都会选择美国服务器来建设网站,近年来RAKsmart服务器受到广大站长的欢迎,那RAKsmart服务器受消费者青睐的关键是什么呢. 1 ...
- sublime text-----查看当前文件的编码格式
1.preferences->settings,在user中添加 "show_encoding": true, "show_line_endings": ...
- [转]nginx简易教程
安装 nginx官网下载地址 发布版本分为 Linux 和 windows 版本. 也可以下载源码,编译后运行. 从源代码编译 Nginx 把源码解压缩之后,在终端里运行如下命令: $ ./confi ...
- 期望dp——zoj3640
/* dp[i]表示力量为i时的期望 dp[i]=sum{tj}/n+sum{dp[i+cj]+1}/n //前一项是cj<i的和,后一项是cj>=i的和 初始状态dp[m] */ #in ...