Spring Boot 定時任務:輕松實現任務自動化

在現代應用開發中,定時任務是一個常見的需求。比如,我們可能需要定時清理過期數據、定時發送郵件通知等。

操作流程

開啟定時任務注解

在啟動類添加注解@EnableScheduling

設置時間(固定時間間隔)

使用?@Scheduled?注解創建定時任務十分簡單,只需幾行代碼就能完成。@Scheduled?除了支持靈活的?cron?參數表達式,還支持簡單的延時操作,如?fixedDelay(任務執行結束后延遲指定毫秒數再執行下一次)、fixedRate(固定頻率,每隔指定毫秒數執行一次)。

@EnableScheduling
@SpringBootApplication
public class DingshiApplication {public static void main(String[] args) {SpringApplication.run(DingshiApplication.class, args);}//下面的兩個方法在第一次啟動項目的時候會執行一次//    半小時提醒一次@Scheduled(fixedRate = 30*60*1000)public void playSth1(){System.out.println("任務一"+ DateFormat.getDateInstance().format(new Date()));}//    四小時執行一次@Scheduled(fixedRate = 4*60*60*1000)public void playSth2(){System.out.println("任務二"+ DateFormat.getDateInstance().format(new Date()));}
}

cron表達式

Cron 表達式是一種用于指定定時任務執行時間的字符串表達式。它由 6 個字段組成,分別表示秒、分鐘、小時、天數、月份和星期幾。每個字段都可以使用特定的符號來指定時間范圍或間隔。

Cron - 在線Cron表達式生成器

通用符號:, * - /
  • , :表示列出枚舉值。例如:在 分鐘 域使用5,20,表示在時間的分鐘數為5,20時觸發事件。
  • - :表示范圍:例如在 分鐘 域使用5-20,表示在時間的分鐘數為5到20時每分鐘都觸發事件
  • * :表示匹配該域的任意值。假如在 分鐘 域使用*,表示時間分鐘數不做限制,分分鐘都出發事件
  • / :表示起始時間開始觸發,然后每個固定時間觸發一次。例如在 分鐘 域使用5/20,表示事件的分鐘數為5時觸發一次,后隔20分鐘即25,45再分別觸發一次。

spring中只可以使用6位。

0 0 2 1 * ?:每月一號凌晨兩點觸發。

0 10,44 14 ? 3 WED :3月的每個星期3下午兩點10分和44分時觸發

專有符號:
  • ?:只能用在DayofMonth和DayofWeek兩個域,由于DayOfMonth和DayOfWeek互斥,需對其一進行設置。
  • L:表示最后,只能出現在DayofWeek和DayofMonth域。如果在DayofWeek域使用5L,意味著在最后一個星期四觸發。
  • W:表示有效工作日(周一到周五),只能出現在DayofMoneth域,系統將在離指定日期的最近的有效工作日觸發事件。
  • #:用于確定每個月第幾個星期幾,只能出現在DayofWeek域。例如在4#2,表示某月的第二個星期三
  • C:只能用在DayofMonth和DayofWeek兩個域,需要關聯日歷,如果沒關聯可以忽略
轉有符號:
  • 專有符號中除了?外,再Spring定時任務中都不支持。

spring異步多線程實現

@Async?是 Spring 框架中的一個任務異步執行注解,在定時任務中主要有以下作用:

  • 避免任務阻塞:Spring 中添加了?@Scheduled?注解的定時任務默認都在一個線程中執行,這意味著當某個定時任務執行時間較長時,其他定時任務會一直等待,出現排隊現象。而使用?@Async?注解后,被注解的定時任務方法會使用新線程異步執行,避免了任務之間的相互阻塞。例如,有任務 A 需要長時間處理數據,任務 B 是定時發送簡單通知,如果沒有?@Async,任務 B 需等任務 A 完成才能執行;添加?@Async?后,任務 B 可在新線程中異步執行,不被任務 A 阻塞。
  • 提高執行效率:在存在多個定時任務的場景下,通過?@Async?讓任務在不同線程中并行執行,充分利用多核 CPU 的性能,提高整體執行效率。比如,一個系統中有定時數據備份任務、定時日志清理任務和定時數據統計任務,使用?@Async?可使這些任務同時進行,而不是依次排隊執行。
  • 增強系統穩定性:當某個定時任務因異常掛死時,若沒有?@Async,會影響后續定時任務的執行;使用?@Async?后,每個任務在獨立線程中運行,某個任務的異常不會導致其他任務無法執行,增強了系統的穩定性和健壯性。

不過需要注意,使用?@Async?時,Spring Boot 默認執行器線程池大小為 100 ,開發者也可根據實際需求自定義線程池配置,以更好地管理異步任務的執行。

樣例展示

@EnableAsync
@EnableScheduling
@SpringBootApplication
public class DingshiApplication {public static void main(String[] args) {SpringApplication.run(DingshiApplication.class, args);}//下面的兩個方法在第一次啟動項目的時候會執行一次@Async@Scheduled(fixedRate = 5*1000)public void playSth1(){System.out.println("任務1線程:"+Thread.currentThread().getName());System.out.println("任務一"+ DateFormat.getDateInstance().format(new Date()));}@Async@Scheduled(cron = "0 0 2 1 * ? ")@Scheduled(fixedRate = 10*1000)public void playSth2(){System.out.println("任務2線程:"+Thread.currentThread().getName());System.out.println("任務二"+ DateFormat.getDateInstance().format(new Date()));}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70125.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

七星棋牌全開源修復版源碼解析:6端兼容,200種玩法全面支持

本篇文章將詳細講解 七星棋牌修復版源碼 的 技術架構、功能實現、二次開發思路、搭建教程 等內容,助您快速掌握該棋牌系統的開發技巧。 1. 七星棋牌源碼概述 七星棋牌修復版源碼是一款高度自由的 開源棋牌項目,該版本修復了原版中的多個 系統漏洞&#…

【Rust中級教程】1.12. 生命周期(進階) Pt.2:生命周期變型、協變、不變、逆變

喜歡的話別忘了點贊、收藏加關注哦(加關注即可閱讀全文),對接下來的教程有興趣的可以關注專欄。謝謝喵!(・ω・) 這篇文章在Rust初級教程的基礎上對生命周期這一概念進行了補充,建議先看【Rust自…

Vue 項目登錄的基本流程

Vue 用戶登錄的基本流程包括以下6個步驟&#xff1a; 步驟&#xff1a; 1. 創建登錄表單 在前端&#xff0c;首先要創建一個登錄表單&#xff0c;用戶輸入賬號&#xff08;用戶名、郵箱、手機號等&#xff09;和密碼。 示例&#xff1a;Login.vue <template><div…

【算法】回溯算法

回溯算法 什么是回溯 人生無時不在選擇。在選擇的路口&#xff0c;你該如何抉擇 ..... 回溯&#xff1a; 是一種選優搜索法&#xff0c;又稱為試探法&#xff0c;按選優條件向前搜索&#xff0c;以達到目標。但當探索到某一步時&#xff0c;發現原先選擇并不優或達不到目標&am…

SpringAI系列 - RAG篇(三) - ETL

目錄 一、引言二、組件說明三、集成示例一、引言 接下來我們介紹ETL框架,該框架對應我們之前提到的階段1:ETL,主要負責知識的提取和管理。ETL 框架是檢索增強生成(RAG)數據處理的核心,其將原始數據源轉換為結構化向量并進行存儲,確保數據以最佳格式供 AI 模型檢索。 …

2025 docker可視化管理面板DPanel的安裝

1.什么是 DPanel &#xff1f; DPanel 是一款 Docker 可視化管理面板&#xff0c;旨在簡化 Docker 容器、鏡像和文件的管理。它提供了一系列功能&#xff0c;使用戶能夠更輕松地管理和部署 Docker 環境。 軟件特點&#xff1a; 可視化管理&#xff1a;提供直觀的用戶界面&#…

基于Python的深度學習音樂推薦系統(有配套論文)

音樂推薦系統 提供實時音樂推薦功能&#xff0c;根據用戶行為和偏好動態調整推薦內容 Python、Django、深度學習、卷積神經網絡 、算法 數據庫&#xff1a;MySQL 系統包含角色&#xff1a;管理員、用戶 管理員功能&#xff1a;用戶管理、系統設置、音樂管理、音樂推薦管理、系…

微信小程序---計劃時鐘設計與實現

微信小程序-計劃時鐘已上線,歡迎各位小伙伴的測試和使用~(微信小程序搜計劃時鐘即可使用) 在這篇博客中,我們將探討如何在微信小程序中設計和實現一個任務管理功能,該功能允許用戶添加、刪除和查看任務。任務管理系統的核心是基于日期和時間的任務管理,可以設置任務的開…

RPA-實例(UiPath )

UiPath 是一個流行的機器人流程自動化(RPA)工具,用于自動化重復性任務。以下是一個簡單的實例,展示如何使用 UiPath 自動化一個常見的任務:從 Excel 文件中讀取數據并將其輸入到網頁表單中。 實例:從 Excel 讀取數據并自動填寫網頁表單 步驟 1:準備工作 安裝 UiPath S…

華為固態電池引發的思索

華為固態電池真牛&#xff01; 超長續航&#xff1a;單次充電即可行駛3000公里 極速充電&#xff1a;五分鐘內充滿80% 極致安全&#xff1a;不可燃、不漏液 長壽命設計&#xff1a;循環壽命達10000次以上 如上是華為電池展示的優勢項&#xff0c;每一條都讓我們心動不已。…

算法分析—— 《歸并排序》

《排序數組》 題目描述&#xff1a; 給你一個整數數組 nums&#xff0c;請你將該數組升序排列。 你必須在 不使用任何內置函數 的情況下解決問題&#xff0c;時間復雜度為 O(nlog(n))&#xff0c;并且空間復雜度盡可能小。 示例 1&#xff1a; 輸入&#xff1a;nums [5,2…

UEFI Spec 學習筆記---11 - Protocols — UEFI Driver Model(1)

11.UEFI Driver Model 遵循 UEFI model 的 EFI driver 是不允許去遍歷所有的 controller 來識別需要安裝到哪個 controller 上的&#xff0c;而是通過 EFI_BOOT_SERVICES 的 ConnectController 和調用 Binding Driver 來實現&#xff1b; 具體實現如下&#xff1a; CoreConne…

10G EPON光模塊

一、10G EPON對稱光模塊 工作模式&#xff1a;上行突發接收、下行連續發射。 工作原理&#xff1a;當需要發送信號時&#xff0c;系統信號通過光模塊的電接口把信號傳送到驅動芯片&#xff0c;芯片處理后&#xff0c;驅動激光器發出調制光信號&#xff0c;經光纖發到遠端&…

整合SaToken 實現登錄功能

整合SaToken 實現登錄功能 1.整合redis 1.1添加相關依賴 // 省略...<!-- Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Redi…

Vue 項目中逐步引入 TypeScript 的類型檢查

在現有的 Vue 項目中逐步引入 TypeScript 的類型檢查 本文源于一道面試題&#xff1a;注&#xff1a;兩種問法一個意思哈&#xff01;&#xff01; 問題一&#xff1a;“ 老項目Js寫的&#xff0c;如何輕量方式享受 ts 類型&#xff1f;” 問題二&#xff1a;“如何 在現有的 …

python后端調用Deep Seek API

python后端調用Deep Seek API 需要依次下載 ●Ollama ●Deepseek R1 LLM模型 ●嵌入模型nomic-embed-text / bge-m3 ●AnythingLLM 參考教程&#xff1a; Deepseek R1打造本地化RAG知識庫:安裝部署使用詳細教程 手把手教你&#xff1a;deepseek R1基于 AnythingLLM API 調用本地…

本地部署MindSearch(開源 AI 搜索引擎框架),然后上傳到 hugging face的Spaces——L2G6

部署MindSearch到 hugging face Spaces上——L2G6 任務1 在 官方的MindSearch頁面 復制Spaces應用到自己的Spaces下&#xff0c;Space 名稱中需要包含 MindSearch 關鍵詞&#xff0c;請在必要的步驟以及成功的對話測試結果當中 實現過程如下&#xff1a; 2.1 MindSearch 簡…

matlab下載安裝圖文教程

【matlab介紹】 MATLAB是一款由美國MathWorks公司開發的專業計算軟件&#xff0c;主要應用于數值計算、可視化程序設計、交互式程序設計等高科技計算環境。以下是關于MATLAB的簡要介紹&#xff1a; MATLAB是MATrix LABoratory&#xff08;矩陣實驗室&#xff09;的縮寫&#…

捷米特 JM - RTU - TCP 網關應用 F - net 協議轉 Modbus TCP 實現電腦控制流量計

一、項目背景 在某工業生產園區的供水系統中&#xff0c;為了精確監測和控制各個生產環節的用水流量&#xff0c;需要對分布在不同區域的多個流量計進行集中管理。這些流量計原本采用 F - net 協議進行數據傳輸&#xff0c;但園區的監控系統基于 Modbus TCP 協議進行數據交互&…

4.1 Hugging Face Datasets實戰:構建企業級數據流水線

Hugging Face Datasets實戰:構建企業級數據流水線 一、Datasets庫核心優勢 1.1 企業級數據處理需求全景 # 支持的數據格式示例 data_formats = {"結構化數據": ["CSV", "Parquet", "SQL"]