北大青鸟中博
邮箱:注册@zbaccp.com 登录
北大青鸟在线报名 | 北大青鸟成绩查询 | 北大青鸟中博南京校区 | 北大青鸟中博技术论坛 |
北大青鸟徐州中博大学生就业方案 在职、转行、待业人员就业方案 北大青鸟中博校区环境 北大青鸟徐州中博千人学电脑十一特别活动
您的位置:新闻动态 - 行业新闻

Quartz官方文档汉化教程_001
作者:张帅 出处:徐州中博 时间:2008-10-06

      (所有程序代码及官方包可以在论坛里下载) Quartz是一个完整的,开源的作业调度系统,它可以被整合,也可以连同J2EE,J2SE应用程序共同应用,从最小的应用程序到大型的商业系统都可以使用。Quartz可以被用来创建简单或复杂的的作业,用来执行数十个,数百个甚至数万的调度;这些作业调度被定义为标准的JAVA组件如EJB等。Quartz调度器包含很多企业级的应用,例如JTA事务和集群。
       到底什么是作业调度,很多人依然不明白这个概念,简单介绍一下:
       你需要你的软件实现这样一个功能,固定的某个时间,比如每天早晨8点执行一个任务,或者每周一早晨执行一个任务,对我们程序员来说就是执行一段代码。这个功能实现起来其实很简单,Timer,TimerTask就可以实现,但是不是很灵活,很多需求需要自己实现。
       我们移动公司每个月月底要进行结算,这个结算?{1}*{2}工要累死人的,可以交给Quartz;一个成熟的大型软件系统总离不开数据统计,如图书管理,希望每天可以自动清算过期未还的书籍数据;一个财务软件希望定时生成各种报表.......这些都可以交给强大的Quartz来实现!
      多说无益,我一直有个观点,理论再多不如一个好理解的好例子,大家一起来通过Quartz的官方例子来学习下,当然,我做过汉化处理了,不用担心E文了,这个世界好人多啊,没办法!
      
      首先下载官方包,附件里有,不用去官方网站找了!
       懒人较多,后面附件里有基于Eclipse的代码,如果你连代码都懒的写,那就直接下载导入项目就可以运行了(注意jar包),怎么导入你都不会?你先补基础吧!
      第一个示例!
      1.新建项目QuartzL001,在src下新建log4j.xml
         <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

        <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
        <appender name="default" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
        </layout>
        </appender>


        <logger name="org.quartz">
            <level value="debug" />
        </logger>

        <root>
            <level value="debug" />
            <appender-ref ref="default" />
        </root>

  
       </log4j:configuration>

       2.导入如下包,用MyEclipse导入javaee.jar,JDK所有包,quartz-1.6.0.jar,commons-logging.jar,log4j.jar,commons-collections.jar。
       3.新建HelloJob类
       package com.zbaccp;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
* <p>
* 这是个简单的作业,只是用来说Hello的入门程序
* </p>
*
* @author 张帅
*/
public class HelloJob implements Job {

    private static Log _log = LogFactory.getLog(HelloJob.class);

    public HelloJob() {
    }
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        // 输出Hello World! -和具体时间
        _log.info("Hello World! - " + new Date());
    }
}
         新建SimpleExample类
     package com.zbaccp;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
/**
* 这个例子用来展示怎么样启动和停止Quartz调度器,如何在Quartz里调度一个作业
*
*
* @author 张帅
*/
public class SimpleExample {
   
    public void run() throws Exception {
        Log log = LogFactory.getLog(SimpleExample.class);
        log.info("------- 初始化 ----------------------");
        // 首先必须得到一个调度器Scheduler
        SchedulerFactory sf = new StdSchedulerFactory();//不用我说了,工厂模式
        Scheduler sched = sf.getScheduler();
        log.info("------- 初始化结束 -----------");
        log.info("------- 调度开始 -------------------");
        // 得到当前时间的下一分钟,比如当前时间14:30:14,下一分钟即14:31:00
        Date runTime = TriggerUtils.getEvenMinuteDate(new Date());
        // 定义一个作业让他和HelloJob产生关联
        JobDetail job = new JobDetail("job1", "group1", HelloJob.class);
        
        // 在下一分钟触发这个作业
        SimpleTrigger trigger =
            new SimpleTrigger("trigger1", "group1", runTime);
        
        // 告诉Quartz用我们的触发器来调度这个作业
        sched.scheduleJob(job, trigger);
        log.info(job.getFullName() + " 将在" + runTime+" 执行");  
        // 开启调度器,并不是真的启动作业(到我们指定时间才会启动)
        sched.start();
        log.info("------- 调度器启动 -----------------");
        // 等足够长的时间让调度器有机会来执行作业
        log.info("------- 等待 90 秒... -------------");
        try {
            // 等待90秒来查看jobs执行
            Thread.sleep(90L * 1000L);
            // 执行中
        } catch (Exception e) {
        }
        // 关闭调度器
        log.info("------- 关闭 ---------------------");
        sched.shutdown(true);
        log.info("------- 结束关闭 -----------------");
    }
    public static void main(String[] args) throws Exception {
        SimpleExample example = new SimpleExample();
        example.run();
    }
}
     
4.没意外的话直接运行SimpleExample,看结果。


>>更多新闻

前一篇:使用 Eclipse 中的 TCP/IP Monitor

 
在线咨询  
黄老师 陆老师
韩老师 值班老师
中心简介
校区简介
校区环境
关于北大青鸟
特色优势
常见问题解答
 
 
ACCP软件工程师课程
什么是ACCP
ACCP5.0课程介绍
各课程定位与特色
各阶段课程
教学模式
ACCP5.0课程体系
ACCP认证证书
 
 
北大青鸟全国免费服务电话:800-828-5191(电信用户使用)
  徐州北大青鸟报名咨询电话:0516 - 85628888 85629999 黄老师 陆老师
地址:徐州市解放南路181科技培训中心(六中对面)
乘车路线:11、19、20、65、39、60、51、64、609、游1、游2至和平路六中站下 苏ICP备08102142号