首页
/
每日頭條
/
圖文
/
spring定時執行
spring定時執行
更新时间:2024-09-28 10:26:08

在日常的業務場景中,我們經常需要讓系統在特定的時間去完成某項任務,比如每小時清理一次數據庫曆史數據、每隔5分鐘同步一次數據等等。Spring Task可以幫我們實現這些功能,不僅開箱即用、配置簡單,而且功能強大。一起來看下吧!

開始使用

創建一個Spring Boot應用,使用@EnableScheduling注解開啟定時任務功能

@EnableScheduling @SpringBootApplication public class ScheduleDemoApplication { public static void main(String[] args) { SpringApplication.run(ScheduleDemoApplication.class, args); } }

創建一個自定義的任務類,為方法添加@Scheduled注解

@Component public class MyTask { @Scheduled(fixedDelay = 2000) public void work() { System.out.println("Start working..."); } }

本地運行程序,可以看到

spring定時執行(你不知道的Spring定時任務)1

每隔2秒鐘,控制台就會打印一次“Start working...”,這樣一個最簡單的定時任務就已經實現了。

@EnableScheduling

這個注解用來開啟Spring的定時任務功能,開啟後應用就會自動檢測帶有@Scheduled注解的方法,按照制定的觸發規則進行方法的調用。如果添加了@EnableScheduling注解,就一定要去實現自定義的任務類(如上的MyTask類)。

@Scheduled

在我們實現的自定義任務類中,必須包含一個@Scheduled注解的方法,如果沒有,程序會在啟動後立即異常退出

spring定時執行(你不知道的Spring定時任務)2

@Scheduled用來标注一個要定時運行的方法,它有三個常用的屬性

  • fixedDelay:固定的時間間隔,單位毫秒,從上次執行結束下次開始執行之間的時間間隔
  • fixedRate:固定的時間頻率,單位毫秒,從上次開始執行下次開始執行之間的時間間隔
  • cron:使用cron表達式來描述更複雜的定時運行規則

fixedDelayfixedRate容易讓人搞混,這裡用一張圖來幫助你理解它們之間的差異

spring定時執行(你不知道的Spring定時任務)3

fixedDelayfixedRate的默認時間單位是毫秒,可以通過timeUnit屬性進行設置

@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.SECONDS) public void work() { System.out.println("Start working..."); }

@Scheduled還有兩個屬性,fixedDelayStringfixedRateString,它們支持通過占位符的方式來獲取application.yml中配置的屬性值

work: fixedDelay: 2000

@Scheduled(fixedDelayString = "${work.fixedDelay}") public void work() { System.out.println("Start working..."); }

假如我們有如下的需求,周一到周五每天的12點進行數據的同步,使用fixedDelayfixedRate是無法實現的,這裡就要用到cron表達式

@Scheduled(cron="0 0 12 * * MON-FRI") public void transferData() { System.out.println("Start transferring data..."); }

cron表達式功能強大,使用簡單,我後面再出一期專門介紹cron表達式的文章吧,這裡不過多介紹了,也可以使用一些在線生成工具來生成表達式,也是很方便的。

Spring Task簡潔、易用、高效,可以滿足單機版定時任務的大部分需求。不過面對企業複雜的需求,它還是過于簡單了,這時就要用到quartzxxl-job這種更加強大完善的框架了。下一篇我們将來深入分析quartz的集成使用,有問題可以在評論區交流下,歡迎點贊收藏關注。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
單身一姐浙江(她公認的一姐)
單身一姐浙江(她公認的一姐)
  中國乒乓球夢之隊,在世界乒壇一直都是神一般的存在,不可逾越,國寶級運動員更是讓他國垂涎三尺,裡約奧運國乒派出女子“三劍客”丁甯、李曉霞、劉詩雯,這樣一個豪華整容,直接劍指總冠軍,毋庸置疑,三人組中女子單打肯定就在她們中産生,最近手感發燙的丁甯成為最大奪冠熱門。這位“女神”大家有多了解?今天小編就帶你走進她的生活。  丁甯原來還是九零後,出生1990年6月...
2024-09-28
天津港現狀(天津港四變)
天津港現狀(天津港四變)
        在中國北方最大的綜合性港口天津港,來自美洲、歐洲、東南亞的貨物在此集結轉運,服務國内國際雙循環。夏德崧攝(中經視覺)   面朝渤海,心向遠洋。   2019年1月17日,在天津港考察時強調,“經濟要發展,國家要強大,交通特别是海運首先要強起來。要志在萬裡,努力打造世界一流的智慧港口、綠色港口,更好服務京津冀協同發展和共建‘一帶一路’”。   ...
2024-09-28
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
道德經反者道之動弱者道之用原文(道德經第四十章反者道之動)
  詳細解讀《道德經》40      反動弱用   〈原文〉   反者道之動,弱者道之用。   天下萬物生于有,有生于無。   〈注釋〉   反:翻轉,反向,相反。   弱:柔弱。   〈譯文〉   向自己的反面運動,是道的運動特征;   依靠柔弱發揮作用,是道的應用特征。   天地萬物總稱為有,有生于無。   〈解讀〉   本章主要是闡述了道的運動特征和道...
2024-09-28
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
紐西之謎面膜真的好用嗎(紐西之謎紐西之謎面膜)
  中國質量新聞網訊 (楊振遠)砸廣告、刷直播、上綜藝,紐西之謎可謂是近兩年風頭正勁的美妝品牌。然而,中國質量新聞網接消費者投訴稱,使用該品牌“爆款”産品“紐西之謎溫泉水乍彈面膜”後,“感覺油油的,很奇怪”,她通過查詢相關資料,認為紐西之謎所宣傳的“礦物質”護膚理念并沒有權威的科學數據支持,因此對其功效和安全性提出了質疑。   接訴後,中國質量新聞網委托專業...
2024-09-28
弱者如何讓自己立于不敗之地(懂得弱者道之用)
弱者如何讓自己立于不敗之地(懂得弱者道之用)
  老子在《道德經》第40章中說:“弱者道之用。”是什麼意思呢?   “弱”,柔弱;“用”,作用。這句話的意思是,“道”的作用是柔弱的。   一說到柔軟,人們自然會想到軟弱無力,像林黛玉一樣,弱不禁風,弱風扶柳一般嬌弱,經不起風吹雨打。   老子所說的“道”,其中的一個内涵就是指規律,規律是客觀存在的,不以人的意志為轉移,這就決定了人隻能服從規律,按客觀規律...
2024-09-28
Copyright 2023-2024 - www.tftnews.com All Rights Reserved