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

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

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

    gbk

    利用Quartz實現定時任務

    利用Quartz實現定時任務

    關鍵字: Quartz         你曾經需要應用執行一個任務嗎?這個任務每天或每周星期二晚上11:30,或許僅僅每個月的最后一天執行。一個自動執行而無須干預的任務在執行過程中如果 發生一個嚴重錯誤,應用能夠知到其執行失敗并嘗試重新執行嗎?你和你的團隊是用java編程嗎?如果這些問題中任何一個你回答是,那么你應該使用 Quartz調度器。

    旁注:Matrix目前就大量使用到了Quartz。比如,排名統計功能的實現,在Jmatrix里通過Quartz定義了一個定時調度作業,在每天凌晨一點,作業開始工作,重新統計大家的Karma和排名等。

    還有,RSS文件的生成,也是通過Quartz定義作業,每隔半個小時生成一次RSS XML文件。

           Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個, 甚至是好幾萬個Jobs這樣復雜的日程序表。Jobs可以做成標準的Java組件或 EJBs。
           http://www.opensymphony.com/quartz/

    從下載連接取得Quartz的發布版本,并且解壓到到本地 目錄。這個下載文件包含了一個預先構建好的Quartz二進制文件(quartz.jar),你可以將它放進自己的應用中。Quartz框架只需要少數的 第三方庫,并且這些三方庫是必需的,你很可能已經在使用這些庫了。

    你要把Quartz的安裝目錄的

    quartz.properties文件

    Quartz有一個叫做 quartz.properties的配置文件,它允許你修改框架運行時環境。缺省是使用Quartz.jar里面的quartz.properties 文件。當然,你應該創建一個quartz.properties文件的副本并且把它放入你工程的classes目錄中以便類裝載器找到它。 quartz.properties樣本文件如例1所示。

    例1.quartz.properties文件允許修改Quartz運行環境:

    一旦將Quartz.jar文件和第三方庫加到自己的工程里面并且quartz.properties文件在工程的classes目錄中,就可以創建作業了。


    1. 在web.xml里面加上


                package.ContextListener
           

    這樣就可以在部署的時候啟動定時器。

    package.ContextListener.java

    package package;


    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;

    import org.quartz.SchedulerException;

    public class ContextListener implements ServletContextListener {
         

    Runner qRunner = null;

     
        public void contextInitialized(ServletContextEvent arg0) {

            // init job

            // start schedule task
            try {
                qRunner = new Runner();
                qRunner.task();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


        public void contextDestroyed(ServletContextEvent arg0) {
            try {
               // stop task
                qRunner.stop();
            } catch (SchedulerException e) {
                e.printStackTrace();
            }
        }

    }

    Runner.java


    import org.quartz.CronExpression;
    import org.quartz.CronTrigger;
    import org.quartz.JobDetail;
    import org.quartz.Scheduler;
    import org.quartz.SchedulerException;
    import org.quartz.SchedulerFactory;
    import org.quartz.impl.StdSchedulerFactory;

    /**
     */
    public class Runner {

        static Scheduler scheduler = null;

        public void task() throws SchedulerException {
            // Initiate a Schedule Factory
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            // Retrieve a scheduler from schedule factory
            scheduler = schedulerFactory.getScheduler();

            // current time
            long ctime = System.currentTimeMillis();

            // Initiate JobDetail with job name, job group, and executable job class
            JobDetail jobDetail = new JobDetail("jobDetail1", "jobDetailGroup1",
                    YourScheduleJob.class);
            // Initiate CronTrigger with its name and group name
            CronTrigger cronTrigger = new CronTrigger("cronTrigger",
                    "triggerGroup1");
            try {
                // setup CronExpression
                CronExpression cexp = new CronExpression("0/180 * * * * ?");
                // Assign the CronExpression to CronTrigger
                cronTrigger.setCronExpression(cexp);
            } catch (Exception e) {
                e.printStackTrace();
            }
            // schedule a job with JobDetail and Trigger
            scheduler.scheduleJob(jobDetail, cronTrigger);

            // start the scheduler
            scheduler.start();
        }

        public void stop() throws SchedulerException {
            scheduler.shutdown();
        }
    public static void main(String args[]) {
            try {
                Runner qRunner = new Runner();
                qRunner.task();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }


    YourScheduleJob.java


    import java.util.Date;

    import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;

    public class YourScheduleJob implements Job {
        
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println("In SimpleQuartzJob - executing its JOB at "
                    + new Date() + " by " + context.getTrigger().getName());
           
            // your job here
           
        }

    }

    posted on 2008-07-20 01:11 百科 閱讀(1003) 評論(1)  編輯  收藏

    Feedback

    # re: 利用Quartz實現定時任務[未登錄] 2012-08-22 10:16 1

    1  回復  更多評論   



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


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 青娱分类视频精品免费2| 99在线免费观看视频| 成人免费视频网址| 4hu四虎免费影院www| 波多野结衣一区二区免费视频| 亚洲乱码中文字幕小综合| 久久人午夜亚洲精品无码区| 日韩免费视频播放| 国产偷国产偷亚洲高清在线| 日韩在线天堂免费观看| 亚洲aⅴ天堂av天堂无码麻豆| 国产精品色午夜视频免费看| 色偷偷亚洲男人天堂| 亚洲精品视频在线观看你懂的| 特级毛片免费播放| 国产av无码专区亚洲av果冻传媒| 中文在线观看永久免费| 永久免费AV无码网站在线观看| 亚洲日韩精品无码专区加勒比 | 免费一区二区无码东京热| 亚洲av之男人的天堂网站| 57pao国产成永久免费视频| 亚洲av片不卡无码久久| 在线看片无码永久免费aⅴ| 亚洲精品视频免费观看| 亚洲国产精品人久久| 成年女人免费视频播放体验区| 亚洲日本一线产区和二线| 亚洲乱亚洲乱少妇无码| 久久精品国产影库免费看| 亚洲国产精品综合一区在线| 精品久久免费视频| 中国一级特黄的片子免费 | 亚洲精品无码鲁网中文电影| 99精品免费观看| 亚洲国产精品久久久久秋霞小| 亚洲欧洲日产国码高潮αv| 91精品导航在线网址免费| 亚洲爆乳成av人在线视菜奈实| 亚洲熟妇无码乱子AV电影| 亚色九九九全国免费视频|