quartz是一个开源的作业调度框架,当然,java可以使用Timer来实现简单任务调度的功能,但Timer是单线程的设计方案,使得一个任务延迟会影响到其他的任务。java也可以使用ScheduledExecutor+Calendar 使用复杂的调度功能,但是这会相应的增加复杂度,例如计算一个精确到天的时间便要使用时间组合来计算。
quartz与java本身的任务调度相比可以满足更加复杂的任务调度需求,quartz提供了一个Job、Tigger和Scheduler设计。
 
作业部分:
一个要被quartz框架调度的作业要实现了Job接口。
一个最简单的Job实现如下:
package cn.edu.gdut.quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException; public class HelloQuartz implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("job test");
}
}
 
当然,上面的实现部分可以实现不同的业务,可以在JobExecutionContext 中传递参数,也可以通过JobExecutionContext 来获取一些关于作业调度的一些信息。
定义了相应的Job后,我们就可以将Job加入到一个JobDetail实例中了,Job完成相应业务的工作,JobDetail则保持了与此Job相关的一些信息,例如Job实例名称,分组,描述,监听器,数据,是否是有状态的等待。
 
触发器部分:
Tigger部分,quartz提供了4个实现和TriggerUtils工具类,满足不同的Tigger要求。以CronTrigger为例,CronTrigger提供了几个不同的构造方法,可以传入时间、Job的信息和cron表达式等,
关于Cron表达式可以猛戳连接http://biaoming.iteye.com/blog/39532
 
//每5秒调度一次 
String cronExpression="*/5 * * * * ?";
Trigger trigger=new CronTrigger("cronTrigger",Scheduler.DEFAULT_GROUP,cronExpression);
一个简单的触发器就完成了,当然,可以选择更加丰富的日期选项来实现更丰富的触发时间点。
TriggerUtils工具类也可以完成此任务,用它可以很方便生产一些Trigger
Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);
trigger.setName("cronTrigger");
trigger.setStartTime(new Date());
以上是一个简单的触发器。
 
调度器部分:
与TriggerUtils类似quartz提供了一个调度器工厂来获取调度器,获取到一个调度器后,我们只有JobDetail和Trigger交给调度器就好了
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
// 对JobDetail和Trigger实例注册到Schedule实例中
scheduler.scheduleJob(jobDetail, trigger);
// 启动调度器
scheduler.start();
try {
// 当前线程等待20秒
Thread.sleep(20L * 1000L);
} catch (Exception e) {
e.printStackTrace();
}
// 关闭调度器
scheduler.shutdown(true);

一个作业的调度器完成了。

至于要怎样调度,那就交给quartz吧。
 

java任务调度quartz框架的小例子的更多相关文章

  1. java 多线程——quartz 定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  2. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  3. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  4. Java任务调度开源框架quartz学习

    一.quartz学习 Java框架介绍:Quartz从入门到进阶 http://edu.yesky.com/edupxpt/233/2209233.shtml 1.例子:http://javacraz ...

  5. java servlet+jquery+json学习小例子

    引入JSON的jar包: 注意,如果包不全,页面请求servlet时,jquery ajax会返回error:function 弹出error occured!!! HTML Code: <%@ ...

  6. 关于java赋值运算的一个小例子

    直接贴代码,这个也是做题目中遇见的,觉得很好奇,查了一波,然后自己编写代码看了一下,果真如此,哈哈哈...... public class 关于Boolean的赋值运算 { public static ...

  7. java入门---简介&简单输出小例子&开发前准备

        Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.J ...

  8. java内存被释放的小例子

    先贴代码: StringBuilder dada = null; ; i<; i++){ dada = new StringBuilder(); ; j<; j++){ dada.appe ...

  9. java 多线程——一个定时调度的例子

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

随机推荐

  1. ViewHolder的改进写法

    先看看ViewHolder通用写法         ViewHolder holder = null;         if(convertView == null){                 ...

  2. 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件

    GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容, ...

  3. PHP如何判断一个gif图片是否为动画?

    首先想到的是用getimagesize()看看type,发现都是gif. 然后想gif动画是gif89格式的,发现文件开头是gif89,但是很多透明图片也是用的gif89格式. 看来必须分析文件的祯了 ...

  4. 在Linux上挂载Windows共享文件夹,如何开机自动挂载(mount)?

    按照一般的思路,我们先将文件夹挂载上去,命令如下: mkdir /mnt/share_software mount //192.9.206.43/share_software /mnt/share_s ...

  5. r-cnn学习(五):SmoothL1LossLayer论文与代码的结合理解

    A Loss Function for Learning Region Proposals 训练RPN时,只对两种anchor给予正标签:和gt_box有着最高的IoU && IoU超 ...

  6. json死循环问题

    20.JSON死循环问题: 向前台发送的数据: 出现此类问题主要是由于在所传数据中有包含关系,比如ElementGroup中有Element,Element中又有ElementGroup,此时就会出现 ...

  7. springMVC学习之接受JSON参数

    今天在springmvc使用rest模式异步提交,后台接受json字符.发现好多问题,感觉和spring3.0使用习惯上多少有点区别.因此把4.0的异步提交和方式记录下来. 前台页面代码如下: < ...

  8. Java、JVM模型

    程序计数器:记录当前线程的执行位置(便于CPU切换线程的时候执行) 虚拟机栈:Java方法,方法从调用到执行完成对应一个栈帧从虚拟机栈入栈到出栈的过程. 本地方法区:Native方法(C++) 方法区 ...

  9. RSA加密(C语言)

    /** * \file rsa.h * * \brief The RSA public-key cryptosystem * * Copyright (C) 2006-2010, Brainspark ...

  10. java学习第三天 数组

    java中数组一样存在多维,二维数组,三维数组..... 二维数组的定义  格式: 数据类型 [][] 数组名 = new 数据类型 [][]; 动态初始化 数据类型[][] 数组名 =  new 数 ...