Java 3種常見定時任務的實現

@(JAVA)[spring|quartz|定時器] 
  近期項目開發中需要動態的添加定時任務,比如在某個活動結束時,自動生成獲獎名單,導出excel等,此類任務由於活動時間是動態的,不能把定時任務配置在配置文件或寫死在代碼中。當然也可以增加一個定時掃描的任務來實現。藉此機會整理了AVA實現定時任務的幾種常用方式,以下做簡要介紹。 
目前主要有以下幾種實現方式: 
JDK自帶 :JDK自帶的Timer以及JDK1.5+ 新增的ScheduledExecutorService; 
Quartz :簡單卻強大的JAVA作業調度框架 
Spring3.0以後自帶的task :可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多; 

下面將一一介紹以上三種實現方式。

  • Timer類 
    這個類允許你調度一個java.util.TimerTask任務。主要有以下幾個方法:
1. schedule(TimerTask task, long delay) 延遲 delay 毫秒 執行
public static void main(String[] args) {
        for (int i = 0; i < 10; ++i) {
            new Timer("timer - " + i).schedule(new TimerTask() {
                @Override
                public void run() {
                    println(Thread.currentThread().getName() + " run ");
                }
            }, 1000);
        }
    }
out :
timer - 2 run 
timer - 1 run 
timer - 0 run 
timer - 3 run 
timer - 9 run 
timer - 4 run 
timer - 8 run 
timer - 5 run 
timer - 6 run 
timer - 7 run 

2. schedule(TimerTask task, Date time) 特定時間執行
public static void main(String[] args) {
        for (int i = 0; i < 10; ++i) {
            new Timer("timer - " + i).schedule(new TimerTask() {
                @Override
                public void run() {
                    println(Thread.currentThread().getName() + " run ");
                }
            }, new Date(System.currentTimeMillis() + 2000));
        }
    }
out:
timer - 0 run 
timer - 7 run 
timer - 6 run 
timer - 8 run 
timer - 3 run 
timer - 5 run 
timer - 2 run 
timer - 1 run 
timer - 4 run 
timer - 9 run 

3. schedule(TimerTask task, long delay, long period) 延遲 delay 執行並每隔period 執行一次
public static void main(String[] args) {
        for (int i = 0; i < 10; ++i) {
            new Timer("timer - " + i).schedule(new TimerTask() {
                @Override
                public void run() {
                    println(Thread.currentThread().getName() + " run ");
                }
            }, 2000 , 3000);
        }
    }
out:
timer - 0 run 
timer - 5 run 
timer - 4 run 
timer - 8 run 
timer - 3 run 
timer - 2 run 
timer - 1 run 
timer - 7 run 
timer - 9 run 
timer - 6 run 
timer - 3 run 
timer - 7 run 
timer - 5 run 
timer - 4 run 
timer - 8 run 

Quartz 定時器實現

Quartz是一個完全由Java編寫的開源作業調度框架,爲在Java應用程序中進行作業調度提供了簡單卻強大的機制。Quartz允許開發人員根據時間間隔來調度作業。它實現了作業和觸發器的多對多的關係,還能把多個作業與不同的觸發器關聯。可以動態的添加刪除定時任務,另外很好的支撐集羣調度。簡單地創建一個org.quarz.Job接口的Java類,Job接口包含唯一的方法:

  1. Spring 3.0+ 自帶的任務調度實現,主要依靠TaskScheduler接口的幾個實現類實現。刪除和修改任務比較麻煩。 
    主要用法有以下三種: 
    • Spring配置文件實現
    • 註解實現
    • 代碼動態添加

配置文件實現

spring-schedule.xml

<task:scheduler id="myScheduler" pool-size="10" />
<task:scheduled-tasks scheduler="myScheduler">
    <task:scheduled ref="job" method="test" cron="0 * * * * ?"/>
</task:scheduled-tasks>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章