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. 高效的jQuery

    选择捷径 // 糟糕 if(collection.length > 0){..} // 建议 if(collection.length){..} 熟记技巧 // 糟糕 $('#id').data ...

  2. 以空白符结尾的 alias

    网上经常有人问这个问题:为什么我写的 alias 在 sudo 下就不管用了? $ alias 'll=ls -l' $ sudo ll a-private-dir sudo: ll: command ...

  3. Linux下提示 bash: xxx command not found

    今天在虚拟机上安装了CentOS5.5,发现运行一些很正常的诸如:init,shutdown,fdisk 等命令时,悍然提示: bash: xxx command not found. 那么,首先就要 ...

  4. HahsRouter hash 路由

    无刷新页面,切换视图,用hash 实现路由切换,本身附带history记录,简单舒服. 最近用vue,看到vue-route的路由,做单页应用切换视图真心易如反掌,分分钟爽到不行.为了加深理解其内涵原 ...

  5. Alcatraz,

    今天重装Alcatraz,运行github上的命令后,安装成功,可是配置界面没出来. 无奈重装, 先删除原本的插件 rm -rf ~/Library/Application\ Support/Deve ...

  6. PHP实验三

    1.输出下列语句地结果 <?php // while语句应用 $i = 1; while ( $i <= 20) { echo $i; if ( $i < 10 ) echo &qu ...

  7. Effective Python2 读书笔记3

    Item 22: Prefer Helper Classes Over Bookkeeping with Dictionaries and Tuples For example, say you wa ...

  8. Gym - 100917H

    题目链接 #include<cstdio> #include<cstring> #include<algorithm> #include<vector> ...

  9. 3. UILable 的使用

    1.  坐标系 来自:http://www.cnblogs.com/mcj-coding/p/5100455.html  QQ: 863740091 如果在平面坐标系中我们要确定一个东西的位置和大小需 ...

  10. 无法打开之前cuda的vs项目,打开之后变灰色

    解决办法: 打开convolution_vs2010.vcxproj文件,将之前cuda 5.5全部改成cuda7.5. 就可以打开了.