定時任務在我們日常專案開發中會經常使用,如資料庫的備份。springboot對於定時任務的實現也作了很便捷的自動化配置,實現的方式共有兩種:一種是使用 spring 自帶的定時任務處理器 @scheduled 註解,另一種就是使用第三方框架 quartz 。
一、@scheduled
二、quartz
@enablescheduling
public
class
}(3)建立測試類,開啟定時任務
//fixedrate 表示任務執行之間的時間間隔,具體是指兩次任務的開始時間間隔,即第二次任務開始時,第一次任務可能還沒結束。
@scheduled
(fixedrate =
2000
)public
void
fixedrate()
//fixeddelay 表示任務執行之間的時間間隔,具體是指本次任務結束到下次任務開始之間的時間間隔。
@scheduled
(fixeddelay =
2000
)public
void
fixeddelay()
//initialdelay 表示首次任務啟動的延遲時間。
@scheduled
(initialdelay =
2000
,fixeddelay =
2000
)public
void
initialdelay()
列印結果
那麼如果我要自定義在每乙個小時的某一分鐘執行怎麼辦呢,那就用到了cron表示式。
cron 表示式格式如下:
[秒] [分] [小時] [日] [月] [周] [年]具體取值如下:
注意 : 月份中的日期和星期可能會起衝突,因此在配置時這兩個得有乙個是 ?
測試cron 表示式,含義是在每個小時第36分鐘,從0s開始每隔5s進行列印。雖然有點繞,理清就好理解了。
//cron 表示式
@scheduled
(cron =
"0/5 40 * * * ?"
)public
void
cron()
列印結果,到第40分鐘後就不再列印了
schedule定時任務涉及的一般是簡單的業務,quartz一般是應對複雜的定時任務。
(1)建立sping專案。引入web和quartz的依賴
>
>
org.springframework.bootgroupid
>
>
spring-boot-starter-quartzartifactid
>
dependency
>
(2)啟動類上新增@enablescheduling註解
(3)quartz 在使用過程中,有兩個關鍵概念,乙個是jobdetail(要做的事情),另乙個是觸發器(什麼時候做),要定義 jobdetail,需要先定義 job,job 的定義有兩種方式:
第一種方式,直接定義乙個bean,記住一定要注入,否則jobdetail找不到該bean,而且這種方式無法傳參:
@component
public
class
myjob1
}
第二種定義方式,則是繼承 quartzjobbean 並實現預設的方法:
public
class
myjob2
extends
quartzjobbean
public
void
sethelloservice
(helloservice helloservice)
@override
protected
void
executeinternal
(jobexecutioncontext jobexecutioncontext)
throws jobexecutionexception
}public
class
helloservice
}
和第1種方式相比,這種方式支援傳參,任務啟動時,executeinternal 方法將會被執行。
(4)最後要新建配置類,配置 jobdetail 和 trigger 觸發器。
@configuration
public
class
quartzconfig
//使用 jobdetailfactorybean 可以配置 jobdetail ,任務類繼承自 quartzjobbean ,這種方式支援傳參,將引數封裝在 jobdatamap 中進行傳遞。
@bean
jobdetailfactorybean jobdetailfactorybean()
//配置觸發器 下面兩種觸發器依次是******trigger 和 crontrigger
@bean
******trigge***ctorybean ******trigge***ctorybean()
@bean
crontrigge***ctorybean crontrigger()
//使觸發器生效
@bean
schedule***ctorybean schedule***ctorybean()
@bean
helloservice helloservice()
}
執行效果:job1每隔3秒執行一次,一共執行6次(因為設定的重複次數是5次)
job2每隔10s執行一次,一直執行下去
spring boot 實現定時任務
參考 第一步 編寫乙個 job 類,需要實現 org.quartz.job 介面 import org.quartz.job import org.quartz.jobexecutioncontext import org.quartz.jobexecutionexception public cl...
springboot定時任務的實現
今天在專案中需要用到乙個定時任務的功能,專案使用的框架是springboot,在此記錄一下再springboot中使用定時任務的一種方式,也希望能幫到有需要的小夥伴。第一步 新增依賴 org.springframework.boot spring boot starter quartz org.my...
spring boot 定時任務實現
scheduled 使用 scheduled 非常容易,直接建立乙個 spring boot 專案,並且新增 web 依賴 spring boot starter web,專案建立成功後,新增 enablescheduling 註解,開啟定時任務 enablescheduling 開啟定時任務 pu...