<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 2,comments - 8,trackbacks - 0
    參考《Prentice.Hall.PTR.Quartz.Job.Scheduling.Framework.Building.Open.Source.Enterprise.Applications.Jun.2006》以及quartz發行包帶的例子寫的一篇關于quartz的使用小文。

    ?

    Quartz是一個開源的作業調度框架,它完全由java寫成,并設計用于J2SEJ2EE應用中。你能夠用它來為執行一個作業而創建簡單的或復雜的調度。比如:每天或每周星期二晚上1130,或許僅僅每個月的最后一天執行,或者在某人離開本站后給他發Email等等。

    ?

    Quartz項目的官方網站:http://www.opensymphony.com/quartz/

    目前發布的版本為1.6.0

    其運行要求JDK版本1.4.0以上,以及第三方庫的支持:

    J2EE.jar

    Commons-beanutils.jar

    Commons-collections-3.1.jar

    Commons-dbcp-1.2.1.jar

    Commons-digester-1.7.jar

    Commons-logging.jar

    Commons-logging-api.jar

    Commons-modeler-1.1.jar

    Commons-pool-1.2.jar

    Commons-validator-1.1.4.jar

    一.Quartz的基本介紹

    Quartz定義了很多包很多類其規模不小。Quartz任務調度主要由三個部件組成:schedulerTriggerJobDetail

    Quartz的接口類圖如下:

    ?

    ?

    1.1 schedulerTriggerJobDetail

    Schedulerquartz的核心,管理所有任務。它通過SchedulerFactory單態實例工廠產生。SchedulerStart之后做下列任務:保存Job,保存Trigger,觸發任務,查看未點火的任務(Misfire Trigger),刪除不可能觸發的任務等。

    Trigger顧名思義為觸發器 scheduler就是通過它來觸發任務。它有幾個分類常用的有SimpleTrigger CronTriggerSimpleTrigger也就是簡單觸發器,用來觸發周期性任務比如每多少多少時間觸發一次。它可以指定StartTime 也就是設置從什么時候開始觸發。

    CronTrigger就是用Cron表達式來定義觸發時間的觸發器。Cron表達式從Unix克隆表達式的進化過來的。其形式相對其表達的意思來說很簡單。

    比如 0 0 0/2 * 3 6L * 的意思是 3月份的最后一個星期的星期五每兩小時觸發一次

    就這樣你可以設定論何時間。

    ?

    JobDetail包含了任務的具體信息包括任務名稱,任務所在的組,任務執行的類,還可以設置任務的一些參數。任務執行的類就是你想讓任務要作的事情可以是論何事情打印一行HelloWorld,計算一下執行時間,統計一下訪問人數,數據庫操作等等,但是必須要實現QuartzJob接口。Job接口很簡單就一個方法public void execute(JobExecutionContext context)在這個方法里面寫入你要做的事。JobExecutionContext包含了任務執行的一些環境你可以通過它得到很多東西JobDetai Trigger Schedule等等。

    1.2 HelloWorld

    下面就用一個簡單的例子來說明Quartz是怎么用的:

    首先要有一個實現了Job接口的類 我們讓它輸出HelloWorld

    ?

    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;

    ?

    public?class?HelloJob?implements?Job?{

    ?

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

    ????
    public?void?execute(JobExecutionContext?context)?throws?JobExecutionException?{

    ???????
    //?TODO?Auto-generated?method?stub

    ???????_log.debug(
    "Hello?world!-"+new?Date());

    ????}


    }


    然后生成Scheduler實例定義JobDetail?Trigger來調度它

    import?java.util.Date;

    import?org.apache.commons.logging.Log;

    import?org.apache.commons.logging.LogFactory;

    import?org.quartz.CronTrigger;

    import?org.quartz.JobDetail;

    import?org.quartz.JobListener;

    import?org.quartz.Scheduler;

    import?org.quartz.SchedulerFactory;

    import?org.quartz.TriggerUtils;

    import?org.quartz.impl.StdSchedulerFactory;

    ?

    public?class?SimpleExample?{

    ????
    public?void?run()throws?Exception{

    ???????Log?log
    =LogFactory.getLog(SimpleExample.class);

    ???????log.info(
    "-------?Initializing?----------------------");

    ???????SchedulerFactory?sf?
    =?new?StdSchedulerFactory();

    ????????Scheduler?sched?
    =?sf.getScheduler();

    ????????log.info(
    "-------?Initialization?Complete?-----------");

    ????????log.info(
    "-------?Scheduling?Jobs?-------------------");

    ????????JobDetail?job?
    =?new?JobDetail("myJob2",?"group1",?HelloJob.class);????????

    ????????CronTrigger?trigger
    =new?CronTrigger("MyTrigger2","group1","myJob2","group1");

    ????????trigger.setCronExpression(
    "0/20?*?*?*?*??");

    ????????sched.scheduleJob(job,?trigger);

    ????????sched.start();

    ????????log.info(
    "-------?Started?Scheduler?-----------------");

    ????????log.info(
    "-------?Waiting?90?seconds?-------------");

    ????????
    try?{

    ????????????
    //?wait?90?seconds?to?show?jobs

    ????????????Thread.sleep(
    90L?*?1000L);?

    ????????????
    //?executing

    ????????}
    ?catch?(Exception?e)?{

    ????????}


    //?shut?down?the?scheduler

    ????????log.info(
    "-------?Shutting?Down?---------------------");

    ????????sched.shutdown(
    true);

    ????????log.info(
    "-------?Shutdown?Complete?-----------------");

    ????}


    ????
    public?static?void?main(String[]?args)?throws?Exception?{

    ????????SimpleExample?example?
    =?new?SimpleExample();

    ????????example.run();

    ????}


    }


    就這樣運行一下quartz就能調度我們定義的HelloJob的任務了。可以看到我們先獲得一個SchedulerFactory實例產生一個Scheduler實例,然后定義了一個JobDetail JobDetail job = new JobDetail("myJob2", "group1", HelloJob.class);

    將他與HelloJob綁定。定義了一個Trigger

    CronTrigger trigger=new
    ?CronTrigger("MyTrigger2","group1","myJob2","group1");

    然后設置其Cron表達式:

    trigger.setCronExpression("0/20 * * * * ?");

    意思是每20秒執行一次

    最后將他們加入到schedulersched.scheduleJob(job, trigger);

    然后啟動schedulesched.start();

    這樣我們就可以看到日志中輸出的HelloWorld和它的執行時間了。

    ?

    上面講的是他們最根本的應用,當然Quartz還有很多東西。

    比如Listener JobStore 等等。

    posted on 2006-11-24 10:19 漁人 閱讀(452) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产精品久久久久网站| 亚洲AⅤ永久无码精品AA| 亚洲国产精品成人精品无码区 | 亚洲精品国产美女久久久| 久久99久久成人免费播放| 精品国产人成亚洲区| 成在人线av无码免费高潮水| 亚洲人成人网站色www| 久久不见久久见免费视频7| 亚洲精品国产电影午夜| 欧美最猛性xxxxx免费| 亚洲va久久久久| 国产一级淫片a免费播放口之 | 国产日韩在线视频免费播放| 亚洲免费观看视频| 国产精品成人免费福利| 亚洲欧美日韩综合久久久久| 又黄又爽一线毛片免费观看| 久久国产乱子伦精品免费午夜| 国产亚洲精品观看91在线| 69xx免费观看视频| 亚洲精品乱码久久久久久V| 亚洲精品动漫人成3d在线| 免费网站看av片| 亚洲AV色吊丝无码| 亚洲国产成人久久精品99 | 国产精品国产免费无码专区不卡 | a级毛片无码免费真人| 立即播放免费毛片一级| 亚洲国产精品无码专区在线观看| 18女人腿打开无遮掩免费| 亚洲av片在线观看| 亚洲国产精品无码中文字| 在线免费观看a级片| 在线观看人成视频免费无遮挡 | 青青草原亚洲视频| 欧洲一级毛片免费| 污视频网站免费在线观看| 亚洲一区二区三区电影| 日韩高清在线高清免费| 日本高清高色视频免费 |