【SpringBoot篇】Spring_Task定時任務框架

文章目錄

  • 🌹概述
  • 🌺應用場景
  • 🎄cron表達式
  • 🛸入門案例
  • 🎍實際應用

在這里插入圖片描述

🌹概述

Spring Task 是 Spring 框架提供的一種任務調度和異步處理的解決方案。可以按照約定的時間自動執行某個代碼邏輯它可以幫助開發者在 Spring 應用中輕松地實現定時任務、異步任務等功能,提高應用的效率和可維護性。

Spring Task 的主要特點包括:

  • 簡單易用:Spring Task 提供了簡潔的注解和配置方式,使得任務調度和異步處理變得非常容易上手。
  • 內置支持:Spring Task 內置于 Spring 框架中,無需額外的依賴,開發者可以直接在 Spring 應用中使用。
  • 靈活的任務調度:Spring Task 支持基于 cron 表達式的定時任務調度,能夠滿足各種復雜的調度需求。
  • 異步任務支持:除了定時任務,Spring Task 也支持異步任務的處理,能夠在后臺線程中執行耗時操作,提高系統的響應速度。
  • 集成注解:Spring Task 提供了 @Scheduled 注解用于標識定時任務的方法,以及 @Async 注解用于標識異步任務的方法,使用起來非常方便。
  • 監控和管理:Spring Task 支持任務的監控和管理,可以通過 JMX 或者 Spring Boot Actuator 進行任務的查看和控制。

🌺應用場景

  • 信用卡每月還款提醒

  • 銀行貸款每月還款提醒

  • 自動續費短信提醒
    請添加圖片描述

  • 火車票售票系統處理未支付訂單

  • 入職紀念日為用戶發送通知

下面我們來學習cron表達式,通過cron表達式可以定義任務的觸發時間

🎄cron表達式

cron其實就是一個字符串,可以用來定義任務觸發的時間
(之前講Linux的文章中有提到cron表達式crond的基本操作)

請添加圖片描述

其實我們不用自己手寫cron表達式
我們可以通過在線生成器來生成cron表達式https://cron.qqe2.com/

🛸入門案例

請添加圖片描述
使用的是黑馬程序員的《蒼穹外賣》項目的代碼來進行學習


在啟動類中加上@EnableScheduling

在這里插入圖片描述

新建一個task包和MyTask類
在這里插入圖片描述

package com.sky.task;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Date;@Component
@Slf4j
public class MyTask {//定時任務@Scheduled(cron = "0/5 * * * * ?")public void executeTask(){log.info("定時任務執行{}",new Date());}
}

在這里插入圖片描述
每隔5秒觸發一次

上面我們完成了SpringTask入門案例的編寫,下面我們來講解在《蒼穹外賣》中的應用

🎍實際應用

請添加圖片描述

我們新創建一個類OrderTask
在這里插入圖片描述

package com.sky.task;import com.sky.entity.Orders;
import com.sky.mapper.OrderMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.List;@Component
@Slf4j
public class OrderTask {@Autowiredprivate OrderMapper orderMapper;//處理超時訂單的方法@Scheduled(cron = "0 * * * * ? ")//每分鐘觸發一次public void processTimeoutOrder(){log.info("定時處理超時訂單{}", LocalDateTime.now());//獲取當前時間,并在當前時間的基礎上減去 15 分鐘LocalDateTime time=LocalDateTime.now().plusMinutes(-15);List<Orders> ordersList=orderMapper.getByStatusAndOrderTimeLT(Orders.PENDING_PAYMENT,time);if (ordersList!=null&&ordersList.size()>0){for (Orders orders:ordersList){orders.setStatus(Orders.CANCELLED);orders.setRejectionReason("訂單超時,已取消");orders.setCancelTime(LocalDateTime.now());orderMapper.update(orders);}}}//處理一直處于派送中狀態的訂單@Scheduled(cron = "0 0 1 * * ?")//每天凌晨一點觸發一次public void processDeliveryOrder(){log.info("定時處理處于派送中的訂單{}",LocalDateTime.now());//獲取當前時間,并在當前時間的基礎上減去 60 分鐘LocalDateTime time=LocalDateTime.now().plusMinutes(-60);List<Orders>ordersList = orderMapper.getByStatusAndOrderTimeLT(Orders.DELIVERY_IN_PROGRESS,time);if (ordersList!=null&&ordersList.size()>0){for (Orders orders:ordersList){orders.setStatus(Orders.CANCELLED);orderMapper.update(orders);}}}
}

在這里插入圖片描述

進入OrderMapper接口里面編寫sql

根據訂單狀態和下單時間查詢訂單
在這里插入圖片描述
這樣子我們就完成了
在這里插入圖片描述

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

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

相關文章

PTA-快速冪

要求實現一個遞歸函數&#xff0c;高效求ab(1≤a,b≤62,ab<263)。 函數接口定義&#xff1a; long long int pow(int a, int b); 其中a 、b 是用戶傳入的參數。 裁判測試程序樣例&#xff1a; #include<iostream> using namespace std; long long int pow(int a,…

數據結構 棧與隊列

棧 棧是一種 后進先出&#xff08; LIFO&#xff09; 的數據結構&#xff0c;它是一種線性的、有序的數據結構。棧的基本操作有兩個&#xff0c;即入棧和出棧。入棧指將元素放入棧頂&#xff0c;出棧指將棧頂元素取出。棧的本質是一個容器&#xff0c;它可以存儲任何類型的數…

String轉Date,Date轉String

源碼&#xff1a; Date currentTime new Date();System.out.println("currentTime:"currentTime);SimpleDateFormat formatter new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString formatter.format(currentTime);System.out.println(&quo…

【深度學習】學習率及多種選擇策略

學習率是最影響性能的超參數之一&#xff0c;如果我們只能調整一個超參數&#xff0c;那么最好的選擇就是它。相比于其它超參數學習率以一種更加復雜的方式控制著模型的有效容量&#xff0c;當學習率最優時&#xff0c;模型的有效容量最大。本文從手動選擇學習率到使用預熱機制…

qt msvc2010 qdatetime.h:122: error: C2589: “(”:“::”右邊的非法標記

報錯內容&#xff1a; C:\Qt\Qt5.4.0\5.4.0\msvc2010_opengl\include\QtCore\qdatetime.h:114: error: C2589: “(”:“::”右邊的非法標記 C:\Qt\Qt5.4.0\5.4.0\msvc2010_opengl\include\QtCore\qdatetime.h:114: error: C2059: 語法錯誤:“::” 解決方法&#xff1a; 打開qd…

2023小紅書Android面試之旅

一面 自我介紹 看你寫了很多文章&#xff0c;拿你理解最深刻的一篇出來講一講 講了Binder相關內容 Binder大概分了幾層 哪些方法調用會涉及到Binder通信 大概講一下startActivity的流程&#xff0c;包括與AMS的交互 全頁面停留時長埋點是怎么做的 我在項目中做過的內容&am…

RocketMQ-NameServer詳解

前言 ? RocketMQ架構上主要分為四部分, Broker、Producer、Consumer、NameServer&#xff0c;其他三個都會與NameServer進行通信。 Producer: ? **消息發布的角色&#xff0c;可集群部署。**通過NameServer集群獲得Topic的路由信息&#xff0c;包括Topic下面有哪些Queue&a…

PTA-病毒感染檢測

人的DNA和病毒DNA均表示成由一些字母組成的字符串序列。然后檢測某種病毒DNA序列是否在患者的DNA序列中出現過&#xff0c;如果出現過&#xff0c;則此人感染了該病毒&#xff0c;否則沒有感染。例如&#xff0c;假設病毒的DNA序列為baa&#xff0c;患者1的DNA序列為aaabbba&am…

數據結構與算法編程題15

設計一個算法&#xff0c;通過遍歷一趟&#xff0c;將鏈表中所有結點的鏈接方向逆轉&#xff0c;仍利用原表的存儲空間。 #include <iostream> using namespace std;typedef int Elemtype; #define ERROR 0; #define OK 1;typedef struct LNode {Elemtype data; …

【從入門到起飛】JavaSE—多線程(3)(生命周期,線程安全問題,同步方法)

&#x1f38a;專欄【JavaSE】 &#x1f354;喜歡的詩句&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。 &#x1f386;音樂分享【如愿】 &#x1f384;歡迎并且感謝大家指出小吉的問題&#x1f970; 文章目錄 &#x1f354;生命周期&#x1f384;線程的安全問題&#…

【Leetcode合集】1410. HTML 實體解析器

1410. HTML 實體解析器 1410. HTML 實體解析器 代碼倉庫地址&#xff1a; https://github.com/slience-me/Leetcode 個人博客 &#xff1a;https://slienceme.xyz 編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 ""…

YOLOv7獨家改進: Inner-IoU基于輔助邊框的IoU損失,高效結合 GIoU, DIoU, CIoU,SIoU 等 | 2023.11

??????本文獨家改進:Inner-IoU引入尺度因子 ratio 控制輔助邊框的尺度大小用于計算損失,并與現有的基于 IoU ( GIoU, DIoU, CIoU,SIoU )損失進行有效結合 推薦指數:5顆星 新穎指數:5顆星 收錄: YOLOv7高階自研專欄介紹: http://t.csdnimg.cn/tYI0c …

開發抖音小游戲什么技術

開發抖音小游戲&#xff0c;使用以下技術可能會相對簡單&#xff1a; HTML5&#xff1a;HTML5 是一種用于創建網頁和應用程序的標準標記語言。它具有豐富的功能和靈活性&#xff0c;可以在各種設備和平臺上運行&#xff0c;包括移動設備和瀏覽器。HTML5 提供了許多游戲開發所需…

大模型AI Agent 前沿調研

前言 大模型技術百花齊放&#xff0c;越來越多&#xff0c;同時大模型的落地也在緊鑼密鼓的進行著&#xff0c;其中Agent智能體這個概念可謂是火的一灘糊涂。 今天就分享一些Agent相關的前沿研究&#xff08;僅限基于大模型的AI Agent研究&#xff09;&#xff0c;包括一些論…

完美解決AttributeError: module ‘numpy‘ has no attribute ‘typeDict‘

文章目錄 前言一、完美解決辦法安裝低版本1.21或者1.19.3都可以總結 前言 這個問題從表面看就是和numpy庫相關&#xff0c;所以是小問題&#xff0c;經過來回調試安裝numpy&#xff0c;發現是因為目前的版本太高&#xff0c;因此我們直接安裝低版本numpy。也不用專門卸載目前的…

Qt全球峰會2023中國站 參會概要

Qt全球峰會2023中國站 參會概要 前言峰會議程簽到 & Demo 演示開場致辭Qt Group 產品總監演講&#xff08;產品開發的趨勢-開放的軟件、工具和框架&#xff09;產品戰略QtQuick or QtWidgets&#xff08;c or qml&#xff09;Qt如何定義AI個人看法 Qt 在券商數字化轉型和信…

【MySQL】內連接和外連接

內連接和外連接 前言正式開始內連接外連接左外連接右外連接 前言 前一篇講多表查詢的時候講過笛卡爾積&#xff0c;其實笛卡爾積就算一種連接&#xff0c;不過前一篇講的時候并沒有細說連接相關的內容&#xff0c;本篇就來詳細說說表的連接有哪些。 本篇博客中主要用到的還是…

快速去除Word文檔密碼,全面解決你的困擾

如果你忘記了Word文檔密碼&#xff0c;或者想解密和去除Word文檔密碼&#xff0c;下面是簡單步驟&#xff1a;第一步&#xff0c;百度搜索【密碼帝官網】找到官方網站&#xff1b;第二步&#xff0c;點擊“立即開始”&#xff0c;進入用戶中心&#xff0c;上傳需要解密的文件。…

中部A股第一城,長沙如何贏商?

文|智能相對論 作者|范柔絲 長沙的馬路&#xff0c;都很有故事。 一條解放西路&#xff0c;是全國人民都爭相打卡的娛樂地標&#xff1b;一條太平街&#xff0c;既承載了歷史的厚重又演繹著現代的鮮活...... 但如果來到河西的桐梓坡路&#xff0c;風景會變得截然不同。 沿…

應用軟件安全編程--28SSL 連接時要進行服務器身份驗證

當進行SSL 連接時&#xff0c;服務器身份驗證處于禁用狀態。在某些使用SSL 連接的庫中&#xff0c;默認情況下不 驗證服務器證書。這相當于信任所有證書。 對 SSL 連接時要進行服務器身份驗證的情況&#xff0c;示例1給出了不規范用法(Java 語言)示例。示例2 給出了規范用法(J…