1.1.1.使用場景
1.1.2.定時任務對比
實現定時任務的方案如下:
1、使用jdk的timer和timertask實現
可以實現簡單的間隔執行任務,無法實現按日曆去排程執行任務。
2、使用quartz實現
quartz 是乙個非同步任務排程框架,功能豐富,可以實現按日曆排程。
3、使用spring task實現
spring 3.0後提供spring task實現任務排程,支援按日曆排程,相比quartz功能稍簡單,但是在開發基本夠用,支援註解程式設計方式。
在spring boot啟動類上新增註解:@enablescheduling
新建任務測試類testtask,編寫測試方法如下:
@component
public
class
choosecoursetask
catch
(interruptedexception e)
logger.
info
("***************測試定時任務1結束***************");
}
測試:
1、測試fixedrate和fixeddelay的區別
2、測試序列執行的特點
2.1.1.cron表示式
cron表示式包括6部分:
秒(0~59) 分鐘(0~59) 小時(0~23) 月中的天(1~31) 月(1~12) 週中的天(填寫mon,tue,wed,thu,fri,sat,sun,或數字1~7 1表示mon,依次類推)
特殊字元介紹:
「/」字元表示指定數值的增量
「*」字元表示所有可能的值
「-」字元表示區間範圍
「,」 字元表示列舉
「?」字元僅被用於月中的天和週中的天兩個子表示式,表示不指定值
例子:0/3 * * * * * 每隔3秒執行
0 0/5 * * * * 每隔5分鐘執行
0 0 0 * * * 表示每天0點執行
0 0 12 ? * wen 每週三12點執行
0 15 10 ? * mon-fri 每月的周一到周五10點 15分執行
0 15 10 ? * mon,fri 每月的周一和周五10點 15分執行
2.1.2.序列任務測試
參考 task1方法的的定義方法,再定義task2方法,此時共用兩個任務方法。
@scheduled(fixedrate = 3000) //上次執行開始時間後5秒執行
public void task2() catch (interruptedexception e)
logger.info("***************測試定時任務2結束***************");
}
通過測試發現,兩個任務方法由乙個執行緒序列執行,task1方法執行完成task2再執行。
3.1.1.需求分析
在專案通常是需要多個不同的任務並行去執行。
本節實現spring task並行執行任務的方法。
3.1.2.配置非同步任務
建立非同步任務配置類,需要配置執行緒池實現多執行緒排程任務。
@configuration
@enablescheduling
public class asynctaskconfig implements schedulingconfigurer, asyncconfigurer
@override
public executor getasyncexecutor()
@override
public asyncuncaughtexceptionhandler getasyncuncaughtexceptionhandler()
@override
public void configuretasks(scheduledtaskregistrar scheduledtaskregistrar)
}
將@enablescheduling新增到此配置類上,springboot啟動類上不用再新增@enablescheduling。
3.1.3.測試
通過測試發現兩個任務由不同的執行緒在並行執行,互不影響。
Spring Task 定時任務
所謂定時任務,就是根據我們設定的時間定時執行任務,就像定時發郵件一樣,設定時間到了,郵件就會自動傳送。在 spring 大行其道的今天,spring 也提供了其定時任務功能,spring task。同 spring 的其他功能一樣,我們既可以通過配置檔案也可以通過註解形式來實現。一 通過配置檔案 1...
Spring Task定時任務
spring task是spring3.0以後提供的定時任務工具。使用spring定時任務,除spring相關的包外不需要新增額外的jar包,支援註解和xml配置兩種形式。準備工作 在spring配置檔案頭中新增命名空間xmlns task及描述。1.1編寫註解的定時任務類 import org.s...
Spring task定時任務
第一次寫定時任務,簡訊通知定時,雖然寫完了,但是感覺 不夠簡潔,效能不行害怕跑蹦了,放到這裡一是為了記錄,更多的是希望大家提出寶貴的意見。1.將使用者id拼接成字串,用來批量查詢使用者資訊。string memberid membertransactions.stream map membertra...