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
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 Scheduler 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)
property>
2.3 web專案中的啟動設定
org.springframework.web .context.ContextLoaderListener
器的配置相關文章請關注PHP中文網!