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. 今天真的很SB

    在公司Review系统网页上,写了一篇几百字的作文, 然后突然手一抖,竟然没有保存就切换页面了, 赶快退回来...没了,啥都没了... 怎么办... 还好洒家N久之前看了一本什么什么杂七杂八的书, 里 ...

  2. vba增删改查数据库

    你在EXCEL中增加一个列名为ID,后在VBA中写以下代码,并引用Microsoft ActiveX Data Objects 2.8后执行Public Sub 写入SQL2008()Dim cnn ...

  3. android发编译

    普通的反编译http://blog.csdn.net/vipzjyno1/article/details/21039349/ 反编译os http://gikir.com/blog/?p=115 ht ...

  4. _proto_和prototype

    _proto_和prototype 实例对象中有一个属性,_proto_,也是对象,叫原型,不是标准的属性,浏览器使用的, 构造函数中有一个属性,Prototype,也是对象,叫原型,是标准属性,程序 ...

  5. 利用VS 性能探查器 解决代码性能不高问题

    VS2017 分析-性能探查器 选择你想分析的项目,选择你的分析工具,我这边是遇到了一个cpu爆满的问题 启动后需要点击一下记录cpu,否则会没有后续的分析忘了截图了,下面是出的分析报告,分析时间比较 ...

  6. 二分图建图,并查集求联通——二维等价性传递 cf1012B好题!

    /* 模拟二分图:每个点作为一条边,连接的是一列和一行(抽象成一个点,列在左,行在右) 由题意得 a-b相连,a-c相连,b-d相连,那么d-c就不用再相连了 等价于把二分图变成联通的需要再加多少边 ...

  7. requestAnimationFrame动画封装

    function Animator(duration, progress) { this.duration = duration; this.progress = progress; this.nex ...

  8. windows下,根据端口号杀死进程

    1.cmd下,根据端口号查询进程号 C:\>netstat -ano|findstr " 2.根据进程号928,在任务管理器杀死PID为928进程 注意:默认情况下,进程选项卡里没有P ...

  9. fatal error U1087: cannot have : and :: dependents for same target Stop.

    转自VC错误:http://www.vcerror.com/?p=72 问题描述: 完成后编译,发现有错误  D:\WinDDK\7600.16385.1\bin\makefile.new(7117) ...

  10. QString组合、拆分。

    1.组合字符常用arg()函数 QString test=QString("_haha_%1_hehe%2") .arg("ee").arg("aa& ...