Springboot實現定時任務的兩種方式

2021-10-11 02:52:42 字數 3253 閱讀 9149

定時任務在我們日常專案開發中會經常使用,如資料庫的備份。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...