quartz是一种开源任务调度框架,提供了强大的任务调度机制,Quartz允许开发人员灵活地定义触发器的调度时间表,并可对触发器和任务进行关联映射。废话不多说了,介绍一下编程的基本步骤:

  1. 实现Job接口,编码实现需要执行的任务。
  2. 定义jobdetail对象,这个对象需要job实现类作为参数
  3. 定义trigger,trigger就是一个时间表,定义什么时候来执行任务,主要分为simpletrigger和crontrigger两个子类,前者适用于简单情况:只执行一次或者固定间隔执行;后者使用表达式来灵活调度任务的执行。
  4. 定义schedulefactory实例,从schedulefactory工厂中获取schedule对象。schedule就像一个容器,里面放入任务和时间表,将某个任务和某个时间表绑定,就可以让任务按照指定的时间执行。其实schedule就是一个线程池。
下面是个例子:
package quartz;

import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* Copyright
* <br/>Program Name:TestJavaProject
* <br/>Comments:
* <br/>JDK version used:
* <br/>Create Date:2013-7-17
* @author LA
* @version
*/
public class SimpleJob implements Job{
private Logger logger=LoggerFactory.getLogger(SimpleJob.class);
@Override
public void execute(JobExecutionContext jobCtx) throws JobExecutionException {
System.out.println("I can count to 10->");
//输出1-10
for(int i=1;i<=10;i++){
System.out.println(" | "+i+" ");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO: handle exception
}
}
System.out.println("<-See I did it.");
JobDataMap properties=jobCtx.getJobDetail().getJobDataMap();
System.out.println("Previous fire time: "+jobCtx.getPreviousFireTime());
System.out.println("curent file time: "+jobCtx.getFireTime());
System.out.println("next fire time: "+jobCtx.getNextFireTime());
} }
package quartz;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; /**
* Copyright
* <br/>Program Name:TestJavaProject
* <br/>Comments:
* <br/>JDK version used:
* <br/>Create Date:2013-7-17
* @author LA
* @version
*/
public class CronTriggerRunner { /**
* @param args
*/
public static void main(String[] args) {
try {
JobDetail jobDetail=JobBuilder.newJob(SimpleJob.class).withIdentity("myjob", "job-group").build();
CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity("cronTrigger", "trigger-group").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
SchedulerFactory sFactory=new StdSchedulerFactory();
Scheduler scheduler=sFactory.getScheduler();
scheduler.scheduleJob(jobDetail, cronTrigger);
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
} }

其中定义crontrigger对象时,使用“0/5 * * * * ?”来表示执行的时间表,意思是从0s开始,每隔5秒执行一次,每分每时每天每月。其中0/5的意思是:从0开始,每隔5,即0,5,10.。。。;“*”表示通配,“?”表示占位,没有意义。更多的表达式写法可以查阅相关资料

quartz 2.1学习(一)的更多相关文章

  1. Quartz 表达式的学习

    只记录用到过的,不全面 Quartz版本:quartz-all-1.6.0.jar 先看图 其他示例: 0 5,6,13 * * ? 意义:每日5:00,6:00,13:00 被触发 0 10,30 ...

  2. 2016-1-9 Quartz框架的学习,写字板demo

    一:自定义view .h文件中代码如下 #import <UIKit/UIKit.h> @interface ZLpaintView : UIView @property(nonatomi ...

  3. 2016-1-9 Quartz框架的学习,剪裁图片并设置边框

    #import "ViewController.h" @interface ViewController () @end @implementation ViewControlle ...

  4. 2016-1-8 Quartz框架的学习,多个气球上升的小动画

    // // BallonView.m // 气球上升的动画 // // Created by Mac on 16/1/8. // Copyright © 2016年 Mac. All rights r ...

  5. Quartz:不要重复造轮子,一款企业级任务调度框架。

    背景 第一次遇到定时执行某些任务的需求时,很多朋友可能设计了一个小类库,这个类图提高了一个接口,然后由调度器调度所有注册的接口类型,我就是其中之一,随着接触的开源项目越来越多,我的某些开发习惯受到了影 ...

  6. Quartz 2D编程指南(1) - 概览

    Quartz 2D编程指南是论坛会员德鲁伊翻译的国外的Quartz 2D一系列学习资料,供大家参考 Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境.我们可以使用Quar ...

  7. Topshelf结合Quartz.NET实现服务端定时调度任务

    这周接受到一个新的需求:一天内分时间段定时轮询一个第三方WebAPI,并保存第三方WebAPI结果. 需求分析:分时段.定时开启.定时结束.轮询.主要工作集中在前三个上,轮询其实就是个Http请求,比 ...

  8. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  9. 学习了quartz.net2.0的心得

    由于项目中要运用到此调度方法,所以抽空学习了下,简单的用法可以掌握了 首先作为没有用过的人来说,怎么用呢? 于是百度了下原来先要下载 quartz.net2.0, 然后我就去下了个quartz.net ...

随机推荐

  1. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...

  2. likely() and unlikely()

    likely() and unlikely() http://www.cnblogs.com/yangzd/archive/2010/09/27/1837202.html 在linux中判断语句经常会 ...

  3. Activity中Menu相关的几个方法的调用时机

    用于创建菜单的常用的方法有如下两种: 1.onCreateOptionsMenu(Menu menu) 2.onPrepareOptionsMenu(Menu menu) MyDiaryActivit ...

  4. __autoload函数

    ./index.php----------------------------------------------------------------------------------<?ph ...

  5. Ural 1450 求最长路 SPFA

    题意就是求S点到T点的有向无环图中的最长路. 用SPFA可以解决. 一开始一直RE的原因 QAQ 竟然是在开Edge 邻接表的时候开小了 改了一下4Y #include <stdio.h> ...

  6. 基于FPGA的DW8051移植(二)

    基于上一篇博文继续,本来想换到oc8051,但是还是不甘心,弄了这么久还是没有弄出来,真是打击屎了. 上一篇说3f进入了operation code所以判断是代码错误,后来发现不可以这么判断. 因为地 ...

  7. x64栈结构

    A function's prolog is responsible for allocating stack space for local variables, saved registers, ...

  8. springMVC中得到request对象,session对象

    RequestAttributes ra = RequestContextHolder.getRequestAttributes(); HttpServletRequest request = ((S ...

  9. 为什么C语言在2013年仍然很重要:一个简单的例子

    附注:在最初的文章里,我没说明进行模2^64的计算——我当然明白那些不是“正确的”斐波那契数列,其实我不是想分析大数,我只是想探寻编译器产生的代码和计算机体系结构而已. 最近,我一直在开发Dynvm— ...

  10. 使用webservice实现App与服务器端数据交互

    What? webservice曾经认为是解决异构系统间整合的最佳解决方案,不依赖于第三方任何系统的支持(不需要部署RDBMS服务器),大家只需要按照官方的规范,即可完成相互之间的数据交互. Why? ...