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

          Feedback

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

          1  回復  更多評論   



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


          網站導航:
           

          My Links

          Blog Stats

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 辰溪县| 大厂| 敦化市| 三江| 柞水县| 大田县| 石景山区| 罗江县| 崇文区| 景谷| 新宁县| 汕尾市| 田林县| 铜鼓县| 安乡县| 扎兰屯市| 广水市| 万载县| 武强县| 澜沧| 浑源县| 英山县| 双辽市| 荥经县| 金坛市| 丁青县| 临清市| 枣强县| 宝丰县| 余姚市| 孟州市| 九寨沟县| 福安市| 南雄市| 咸阳市| SHOW| 武安市| 太仆寺旗| 卢龙县| 收藏| 达尔|