1,springboot下定時任務的實現
(1)@scheduled註解方式實現
啟動類上新增註解@enablescheduling,定時任務方法上新增註解@scheduled
方法上使用cron表示式配置定時任務的執行規則,詳細講解一下springboot下表示式寫法
示例 : @scheduled(cron = "0 0 0/1 * * ?") 每小時執行一次
規則: seconds minutes hours dayofmonth month dayofweek (中間用空格相隔)
取值: 0~59 0~59 0~23 0~31 0~11 1~7
含義: 顧名思義,自行翻譯
* 表示所有值;
? 表示未說明的值,即不關心它為何值;
/ 符號前表示開始時間,符號後表示每次遞增的值;
(2)實現schedulingconfigurer介面,實現configuretasks方法
此種方法更加靈活,可以對定時任務進行更多的配置,
此處實現乙個可在程式執行時修改定時規則的定時任務
@lazy(false)
@component
@enablescheduling
public class currenttestschedule implements schedulingconfigurer
@override
public void configuretasks(scheduledtaskregistrar taskregistrar)
};trigger trigger = new trigger()
};taskregistrar.addtriggertask(runnable, trigger);
}}
可以通過外部呼叫setcron方法傳入新的規則來修改定時任務規則
2,**部分的反思
(1)**分層
定時任務一般用來做批量操作或者某些特定操作,定時規則和跑批的過程應當放到最外層,具體到**層面
@scheduled(cron = "0 0 0 * * ?")
public void task()
liststrlist = new arraylist<>();
if (collectionutils.isnotempty(strlist))catch (exception e)],錯誤資訊:[{}]", str, e.getmessage() );}}
}}
考慮到分布式集群的部署,需要進行分布式鎖的操作,定時任務過程中不好丟擲異常,所以在最外層try{}catch()進行異常的記錄,同時也不會影響到其他部分的邏輯處理,異常的處理可以根據具體的業務場景進行更加細緻的區分
(2)按照職責單一的模式去開發**,也是一種日常編碼的好習慣,同時也有利於定時任務部分**後續的維護和健壯性,職責越單一,後續對於開發者越友好,關注點越專一,越細化,比如,專案上線後,只需關注定時任務是否執行,不需關注是否正常執行,是否正常是其他部分負責的。
(3)日誌資訊的完善,因為定時任務跑上線後,發生錯誤後很難去定位錯誤,這時就需要在開發過程中關鍵位置列印日誌資訊,配合職責單一的開發模式,可以準確的去定位錯誤,觀察整個定時任務的運**況。
Quartz Spring 定時任務應用
在實際的專案應用中常遇到定時執行某個任務,比如定時重新整理商品的狀態,定時更新token等等,定時任務在系統中的應用恨頻繁下面就簡單講解一下定時任務框架quartz 和 spring的整合。public class testtask execute false 0 55 2 28 配置完整格式為 秒...
linux定時任務 at定時任務
at命令是一次性定時計畫任務,at的守護程序atd會以後臺模式執行,檢查作業佇列來執行作業。atd守護程序會檢查系統上的乙個特殊目錄來獲取at命令的提交的作業,預設情況下,atd守護程序每60秒檢查一次目錄,有作業時,會檢查作業執行時間,如果時間與當前時間匹配,則執行此作業。注意 at命令是一次性定...
at定時任務
at的守護程序每60秒檢查一次作業佇列,有作業時檢查作業,時間恰好達到,則執行作業。前提 保證atd程序已經啟動,檢查atd程序是否啟動 ps ef grep atd。atd的命令格式 at 選項 時間 ctrl d 結束at命令的輸入。選項 m 任務完成後給使用者傳送郵件,沒有標準輸出。i atg...