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的更多相关文章

  1. 企业级任务调度框架Quartz(9) Quartz之作业触发器Trigger

    前序:      我们已经大概对Quartz的基本有了一个大概的认识:现在我们将要逐渐对Quartz的各个重要组件进行学习:前面已经对job进行了详细讲解,现在我们来认识下它的一个重要兄弟,没有它,作 ...

  2. Quartz任务调度快速入门

    Quartz任务调度快速入门 概述 了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的 ...

  3. Quartz任务调度入门

    Quartz任务调度入门 了解Quartz体系结构Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器.任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念 ...

  4. Quartz任务调度 服务日志+log4net打印日志+制作windows服务

    引言 现在许多的项目都需要定时的服务进行支撑,而我们经常用到的定时服务就是Quartz任务调度了.不过我们在使用定时Job进行获取的时候,有时候我们就需要记录一下自定义的日志,甚至我们还会对执行定时J ...

  5. .net core中使用Quartz任务调度

    使用xml配置Quartz任务调度程序 1.Nuget Install-Package Quartz Install-Package Quartz.Plugins 2.站点根目录下加入文件quartz ...

  6. Quartz 任务调度(转)

    原文链接:http://lavasoft.blog.51cto.com/62575/93938 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制.Qu ...

  7. Quartz任务调度

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Quartz任务调度 课程目标 : 了解Quartz框架 : 任务(Job)  触发器(Trig ...

  8. Quartz任务调度实践

    最近在写一个任务调度程序,需要每隔几秒查询数据库,并取出数据做一些处理操作.使用到了Quartz任务调度框架. 基本概念 Quartz包含几个重要的对象,分别为任务(Job),触发器(Trigger) ...

  9. Quartz教程四:Trigger

    原文链接 | 译文链接 | 翻译:nkcoder 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正:有兴趣 ...

随机推荐

  1. 21-2-substring

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 【笔记篇】斜率优化dp(三) APIO2010特别行动队

    旁听了一波给舒老师和学弟的pkuwc面试讲座... 这里有一段隐身的吐槽, 想看的请自己想办法观看. 不想看的跳过这一段看似空白的东西就好了... 刚开始ATP学姐给我们讲了自己面试的时候的事情..描 ...

  3. rem换算公式

    当前rem基准值=预设的基准值/设计稿宽度*当前设备的宽度

  4. [JZOJ3424] 【NOIP2013模拟】粉刷匠

    题目 题目大意 有\(K\)种颜色的小球,每种颜色的小球有\(c_i\)个. 求相邻颜色不同的排列的方案数. \(K\leq 15\)且\(c_i\leq 6\) 思考历程&正解1 我是一个智 ...

  5. 校园商铺-2项目设计和框架搭建-8升级mysql驱动相关的配置以支持mysql8

    1.如何升级驱动 1.1步骤: a 确保当前程序能正常访问数据库 b 更新mysql驱动重新运行程序进行校验 maven依赖https://mvnrepository.com/artifact/mys ...

  6. javascript和jquery

    JavaScript 1.概述 JavaScript是一种基于对象和事件驱动,并具有安全性能的脚本语言. 2.语法 HTML 中的脚本必须位于 <script> 与 </script ...

  7. h5判断是否为iphonex

    js移动端页面判断是否是iphoneX 转自https://blog.csdn.net/weixin_39924326/article/details/80352929 function isIPho ...

  8. 杂项-日志:日志(log)

    ylbtech-杂项-日志:日志(log) 1.返回顶部 1. 概述 网络设备.系统及服务程序等,在运作时都会产生一个叫log的事件记录:每一行日志都记载着日期.时间.使用者及动作等相关操作的描述. ...

  9. System.DateTime.cs

    ylbtech-System.DateTime.cs 1. 程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5 ...

  10. System.Web.Mvc.IController.cs

    ylbtech-System.Web.Mvc.IController.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Public ...