應用 定時任務(SpringBoot)

2021-08-27 03:40:47 字數 1650 閱讀 7713

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...