注册本站  论坛  繁體中文

电脑技巧
手机 | MP3 | MP4 | 显卡 | 主板 | 显示器 | 光存储 | 笔记本 | 网络设备 | 移动存储 | 数码相机
键鼠 | CPU | 音箱 | GPS | 电视 | 服务器 | 投影机 | 机箱电源 | 品牌电脑 | 办公打印 |
| 网站首页 | Cisco | Windows | Linux | Java | Dotnet | Oracle | 网页设计 | 平面设计 | 安全 | 软件应用 | 电脑维修 | 办公维修 |
您现在的位置: 电脑技巧 >> Java >> J2EE >> EJB >> Java正文

使用Quartz实现任务调度和调度管理

文章来源:javaresearch.org 作者:javamonk… 更新时间:2008-8-23 14:38:38 【 】 【加入收藏

    Quartz是Java里流行的一种开源任务调度框架。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样简单复杂的日程表。Jobs可以做成标准的Java组件或 EJBs.本文会先大概介绍一下如何使用Quartz,然后重点是介绍实际项目里,通过二次开发,增加任务调度的可管理性和异常处理,使它具备一定的商业任务调度框架的功能

    Quartz要求一个任务必须实现接口Job的execute方法,如下一个简单的Job:

import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class SimpleJob implements Job {

    public SimpleJob() {
    }

    public void execute(JobExecutionContext context) throws JobExecutionException {
        
     try {
       
       Thread.sleep(1000*20);
       
     } catch (InterruptedException e) {
       
       e.printStackTrace();
     }

   }
}

    Quartz将任务和时间触发分开,因此,你还需要指定时间触发,通常采用Cron方式,如每天早上六点,也可以指定某个固定时间,如2008年8月8号等。

    如以下即指定每天早上六点

CronTrigger cronTrigger = new CronTrigger("triggerName", "triggerGroup");
try {
    
    CronExpression cexp = new CronExpression("0 6 * * * ");     
    cronTrigger.setCronExpression(cexp);
} catch (Exception e) {
    e.printStackTrace();
}

    Scheduler 类负责将时间触发指定给JobDetail,简单的来说JobDetail封装了你的任务,并可以提供任务名,所属组,以及附加的一些参数,代码如下:

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = new JobDetail("jobName", "groupName", SimpleJob.class);
Scheduler.scheduleJob(job, cronTrigger);

    Job在被触发的时候,会通过反射实例化SimpleJob.class(因此你的Job必须有一个无参数的构造函数),并调用execute方法。

    对于上列的SimpleJob,可以从execute方法输入参数context里获取一些属性,如任务名(如例子里的jobName),所在组(如:groupName).更重要的是,context里可以包含你指定的参数,如我们想让SimpleJob在运行的时候休眠时间为50秒,也可以这么写:

public void execute(JobExecutionContext context) throws JobExecutionException {
        
try {
    
    int sleep = context.getJobDetail().getJobDataMap().getInt("sleep");
    Thread.sleep(1000*sleep);
    
} catch (InterruptedException e) {
    
    e.printStackTrace();
}

}

参数Sleep将由调度框架传入,如下

SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = new JobDetail("job1", "group1", SimpleJob.class);
job.getJobDataMap().put("sleep", 50);
Scheduler.scheduleJob(job, trigger);

  • 上一篇Java:

  • 下一篇Java:
  • 最 新 热 门
     Flash、HTML、Ajax 谁将赢得Web应用之战
     超越XML和JSON:YAML,Java开发人员的新选择
     优秀Java程序员必须了解的GC工作原理
     Java 6 RowSet 使用完全剖析
     pureQuery带注释的方法风格简介
     面向Java开发人员的Scala指南: 实现继承
     Java 6中的性能优化
     Java实现Windows的dir命令
     Java标准类库提供的容器总结
     在Tomcat上开发Web应用如何保证兼容性
    最 新 推 荐
     一步一步学EJB3.0(四):实体Bean开发
     一步一步学EJB3.0(三):悟透会话Bean(下)
     一步一步学EJB 3.0(三):悟透会话Bean(上)
     用jbuilder7+jboss3+vss开发EJB
     一步一步学EJB 3.0(二):初探企业EJB模块开发
     EJB 3.0学习笔记一:开发环境搭建
     使用Quartz实现任务调度和调度管理
     关于EJB3的一个简单例子
     EJB3.0中查询boolean值的方法
     EJB3应用程序的开发方法
    相 关 文 章

    Java 6 RowSet 使用完全剖析
    pureQuery带注释的方法风格简介
    使用CommonNavigator开发资源管理器--模型篇
    使用CommonNavigator开发资源管理器--基础篇
    MyEclipse中Spring工程使用@Resource注释的…
    Spring集成Quartz的XML配置
    使用SpringtUtil获取Spring IoC容器中的Bea…
    浅谈spring时序调度Quartz
    使用Struts+Hibernate上传大对象(BLOB)
    java中使用jdom生成百度新闻抓取的xml文件

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告

     

    Copyright 2006-2008 pcjx.com All Rights Reserved
    电脑技巧 版权所有 粤ICP备06059145号 地图
    本网站所有内容未经许可不得转载或做其他使用