<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 百科 閱讀(1002) 評論(1)  編輯  收藏

    Feedback

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

    1  回復  更多評論   



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


    網站導航:
     

    My Links

    Blog Stats

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩午夜理论免费TV影院| 免费精品一区二区三区第35 | 亚洲av无码片区一区二区三区 | 69影院毛片免费观看视频在线| 国产亚洲精品一品区99热| 在线观看黄片免费入口不卡| 亚洲午夜久久久久妓女影院| 国产日韩AV免费无码一区二区| 国产亚洲人成无码网在线观看| 久久免费动漫品精老司机| 亚洲黄网站wwwwww| 免费电影在线观看网站| 亚洲av永久无码一区二区三区| 免费jjzz在在线播放国产| 九九九精品视频免费| 性色av无码免费一区二区三区| 亚洲天天做日日做天天看| 日韩免费高清大片在线| 亚洲黄色片在线观看| 皇色在线视频免费网站| 亚洲aⅴ无码专区在线观看春色| 国产精品免费视频一区| 国产乱妇高清无乱码免费| 久热综合在线亚洲精品| 日本免费一区二区在线观看| 亚洲av无码一区二区三区天堂 | 亚洲色无码专区在线观看| 最好看的中文字幕2019免费| 国产亚洲精品VA片在线播放| 亚洲永久中文字幕在线| 噼里啪啦电影在线观看免费高清| 亚洲国产AV无码一区二区三区| 亚洲综合色视频在线观看| 99re热精品视频国产免费| 亚洲乱妇老熟女爽到高潮的片| 亚洲人午夜射精精品日韩| **aaaaa毛片免费同男同女| 狠狠综合亚洲综合亚洲色| 亚洲国产精品无码久久一区二区| 国产一精品一AV一免费孕妇| xxxx日本在线播放免费不卡|