近日項目開發中須要執行一些定時任務,好比須要在天天早上9:00,準時發佈信息,藉此機會整理了一下定時任務的幾種實現方式,因爲項目採用spring框架,因此我都將結合java
spring框架來介紹。spring
注:我的推薦使用第二種方式,由於這樣因此的類都是普通類,不須要事先區別對待。app
注:並不是每種任務均可以使用這兩種觸發器,如java.util.TimerTask任務就只能使用第一種。Quartz和spring task均可以支持這兩種觸發條件。框架
一、Java自帶的java.util.Timer類,自定義一個類繼承TimerTaskide
例子:component
package com.timertest; import java.util.Timer; import java.util.TimerTask; public class TestTimerTask { Timer timer; public TestTimerTask(int a) { timer = new Timer(); timer.schedule(new GoodTimerTask(),0, 1000*a); } public static void main(String[] args) { System.out.println("About to schedule task."); new TestTimerTask(3); } class GoodTimerTask extends TimerTask{ @Override public void run() { System.out.println("Timer running!"); } } }
二、Spring3.0之後自帶的taskxml
//1、在applicationContext.xml配置的方式 //一、準備jar包 // (1)spring核心jar包 //二、在項目中寫個類 @Service public class BookScheduleTask { @Resource private BookService bookService; public Page<Book> findAllBook(){ //不帶參數 System.out.println("BookScheduleTask.findAllBook()"); return bookService.findBook(1); } } //三、在ApplicationContext.xml配置文件中寫以下配置: <!-- 自動掃描 --> <context:component-scan base-package="com" /> <!-- spring框架的Scheduled定時器 --> <task:scheduled-tasks> <task:scheduled ref="bookScheduleTask" method="findAllBook" cron="0 0 12 * * ?"/> </task:scheduled-tasks> 說明:(1)<context:component-scan base-package="com" />該配置,相信你們用過spring的都知道是什麼意思, 是spring用於掃描註解的 (2)<task:scheduled-tasks>,該配置的做用是定義一個時間計劃任務,定義某個類下面某個方法在某個時間執行。 <task:scheduled ref="bookScheduleTask" method="findAllBook" cron="0 0 12 * * ?"/>,ref表示的是 某個要在規定時間執行的類,method表示要執行的類下的某個方法,cron表示時間表達式,具體詳細的表達式 能夠百度查詢。 //2、基於註解的spring定時器 // 一、同上,準備好spring的jar包 // 二、在項目中建立一個類,用於執行定時任務的類。以下: @Component("bookScheduleTask") public class BookScheduleTask { @Resource private BookService bookService; @Scheduled(cron="0 50 14 * * ?") public void findAllBook(){ System.out.println("BookScheduleTask.findAllBook()"); bookService.findBook(1); } } // 說明:基於註解的方法,@Component("bookScheduleTask")表示定義了一個別名。 // @Scheduled(cron="0 50 14 * * ?")表示:該註解下的方法是一個時間任務,在cron="0 50 14 * * ?"(14:50)執行findAllBook()方法
三、使用quartz,重量級框架,該方式詳見blog
http://gong1208.iteye.com/blog/1773177繼承