首頁  >  文章  >  Java  >  定時器的實作、java定時器Timer和Quartz介紹與Spring中定時器的配置

定時器的實作、java定時器Timer和Quartz介紹與Spring中定時器的配置

高洛峰
高洛峰原創
2016-12-16 13:23:401563瀏覽

1定時器的作用
在實際的開發中,如果專案中需要定時執行或需要重複執行一定的工作,定時器顯現的尤為重要。
當然如果我們不了解計時器就會用執行緒去實現,例如:
package org.lzstone.action
public class FinanceAction extends Thread{
            while(true){
       Thread.sleep((int)(Math.random()*1000));
       date = new Date();
  catch(Exception e){
        e.printStackTrace();
       }
}
}
自己實作計時器的工作很複雜,如果實作不好佔用記憶體過多,系統就此Over,所以處理定時執行或重複執行的任務,定時器是很好的選擇
2.java中常見的定時器
1)借助Java.util.Timer來實現
2)OpenSymphony社群提供的Quartz來實現
3.介紹Timer
利用Timer開發定時任務是主要分為兩個步驟:
1)創建定時任務類別
範例程式碼:
package org.lzstone.action
import java.util.TimeTask
public class LzstoneTimeTask extends TimeTask{
      
       }
}
2)運行定時任務,執行定時任務分為兩種方式:
2.1)程式直接啟動
範例程式碼:
package org.lzstone.action
public class LzstoneMain{
       //執行定時器的任務
        //建立實例
        Timer timer = new Timer();
      
        0- 執行任務前的延遲時間,單位為毫秒。
        1*1000- 執行各後續任務之間的時間間隔,單位是毫秒。
        timer.schedule(new LzstoneTimeTask(),0,1*1000);
       }
}
2.2)web監聽方式
範例程式碼
{
       private Timer timer = null;
       //初始化監聽器,建立實例,執行任務
       public void contextInitialized(ServletContextEvent event){🠜             timer.schedule(new LzstoneTimeTask(),0,1*1000);
       }
       //銷毀監聽器,停止執行任務
       public void contextDestroyed(ServletContextEvent event){
    的任務是此計時器所執行的最後一個任務。
              timer.cancel();
        }
}
web.xmloo Main
  

4. 介紹Quartz
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源項目,可以用來創建簡單或複雜的定時任務,利用Quartz開發定時任務的步驟與Timer類

似。

利用Quartz開發定時任務是主要分為兩個步驟:
1)建立定時任務類別
範例程式碼:
package org.lzstone.action
public class LzstoneTimeTask implements Job{
{
              //所執行的計時器任務
       }
}
2)執行定時任務,執行定時任務分為兩種方式:
2.1)程式直接啟動,建立任務調度器及設定對應的任務計畫
範例程式碼:
package org.lzstone.action
public class LzstoneMain{  priv static Sc​​heduler sched;
       public static void run() throws Exception{
            Detail = new JobDetail("lzstoneJob",sched.DEFAULT_GROUP,LzstoneTimeTask.class);
              //目標建立任務計畫
CronTrigger trigger = new CronTrigger("lzstoneTrigger","lzstone","0 0 12 * * ?");
             sched = new org.quartz.impl. StdSchedulerFactory().getScheduler();
              sched.scheduleJob(jobDetail,trigger);    
       //停止
       public static void stop() throws Exception{
        
}
//執行
public class Main{
       .............
       public void run(){
  
       ........ ....
}
2.2)web監聽方式
範例程式碼:
package org.lzstone.action
public class LzstoneMainListener implements ServletContextListener{
    
public void contextInitialized(ServletContextEvent event){
               LzstoneMain.run();
   public void contextDestroyed(ServletContextEvent event){
              LzstoneMain.stop();
     xml設定

  
        org.lzstone.action.LzstoneMainListener
  
執行簡單的任務比較方便,不足之處是無法確定執行時間,且依賴性比較強,必須繼承指定的類別
Quartz方式實作定時器,方便,清晰指定啟動時間,定時參數比較靈活,容易實作比較複雜的定時任務,不足之處是需要實現特定接口,加載其框架
兩種方式各有優缺點,在特定場合可以根據其特點選擇使用。
6.Spring定時任務
Spring定時任務對Timer與Quartz都提供了支持,並且實現步驟基本上一樣
首先配置Spring對Timer的支持
1.1 創建定時任務類
package org.lzstone.action
import java. .TimeTask
public class LzstoneTimeTask extends TimeTask{
       public void run(){
          ,配置任務計劃與任務調度器
    在專案的WEB-INF下面建立TimerConfig.xml檔案(一般稱為applicationContext.xml)










3000



  4000






















execute
property>





   



    0 0 12 * * ?






   

   




2.3 web專案中的啟動設定
  
      /WEB-INF/QuartzConfig.xml
                       org.springframework.web .context.ContextLoaderListener
        
           
    器的配置相關文章請關注PHP中文網!



陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn