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. Docker容器操作中常用命令集合

    docker pull 从仓库获取所需要的镜像 docker images 显示本地已有的镜像. docker commit 提交更新后的副本. docker build 创建一个新的镜像 ADD 复 ...

  2. 4、JavaScript

    一.JavaScript的概念:是基于对象和事件的脚本语言. 1.特点: a).安全性. b).跨平台性(只要可以解释JS的浏览器就可以执行,和平台无关) 2.JavaScript与Java的区别: ...

  3. linuxmint 17没有vim

    首先上软件管理器中安装vim,之后配置.vimrc文件 下面是从网上摘抄的配置文件: """""""""&qu ...

  4. Go - 变量初始化 及 注意事项

    Go变量 初始化 对 复合类型(数组.切片.字典.结构体)变量的初始化是,有一些语法限制: 1.初始化表达式必须包含类型标签: 2.左花括号必须在类型尾部,不能另起一行: 3.多个成员初始值以逗号分隔 ...

  5. .htaccess 基础教程(四)Apache RewriteCond 规则参数

    Apache模块 mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制.此UR ...

  6. Linux串口中的超时设置

    在Linux下使用串口通信时,默认的阻塞模式是不实用的.而采用select或epoll机制的非阻塞模式,写代码有比较麻烦.幸好Linux的串口自己就带有超时机制. Linux下使用termios.h中 ...

  7. linux 最近使用的命令

    vi 文件名   >>  按 i 键,进行编辑,编辑完,按ESC键,再按:q代表不保存退出,按:wq代表保存退出. ps aux|grep java >>  搜索目前启动的ja ...

  8. 利用js刷新页面方法

    1,reload 方法,该方法强迫浏览器刷新当前页面. location.reload(force) 如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-S ...

  9. 内网安全工具之cain劫持工具

    满足arp的条件为:目标IP为动态IP(arp -a查看) 下载地址:cain4.9.zip 官网:http://www.oxid.it/cain.html 08专版:cain08安装版 把cain下 ...

  10. python 3.x urllib学习

    urllib.request import urllib.request as ur url='http://ie.icoa.cn' user_agent = 'Mozilla/4.0 (compat ...