@Scheduled注解 定時任務講解

用于在Java Spring框架中定時執行特定任務的注解 @Scheduled,它能夠指定方法在特定時間間隔或特定時間點執行。默認參數是cron,cron參數被用來定義一個Cron表達式,它代表了任務執行的時間規則在這里插入圖片描述
參數如下
在這里插入圖片描述

Cron

這是是一種時間表達式,用于表示定時任務的執行規則。在Spring中,@Scheduled注解的cron參數就是用來設置Cron表達式的。Cron表達式的基本格式為:

secdond minute hour dayOfMonth month dayOfWeek year

每個字段的含義如下:

  1. second:秒(0-59)
  2. minute:分鐘(0-59)
  3. hour:小時(0-23)
  4. dayOfMonth:月份中的某一天(1-31)
  5. month:月份(1-12或者 JAN-DEC)
  6. dayOfWeek:星期中的某一天(1-7或者 SUN-SAT)
  7. year:年份(留空表示任何年份)

使用*表示匹配任意值,例如,在month字段中表示每個月,而在dayOfWeek字段中表示每一天。除了之外,你還可以使用一些其他符號,比如:

8.-:表示一個范圍,比如 1-5 表示1到5。
9.,:表示一個列表,比如 1,3,5 表示1、3和5。
10./:表示間隔,比如 0/15 表示每隔15分鐘。

例如,要設置每天上午10點執行任務,Cron表達式可以是 0 0 10 * * ?。 0 0/1 * * * ?,表示每隔一分鐘執行一次任務。

示例:

@Scheduled(cron = “0 15 10 * * ?”) // 每天上午10:15執行

fixedRate

這個參數定義了方法調用之間的固定周期,單位為毫秒。不論前一次方法執行花費了多長時間,都會按照這個間隔執行。如果上一個任務堵塞不排除臟數據的風險
示例:

   @Scheduled(fixedRate = 1000) // 每1000毫秒執行一次

fixedDelay

這個參數定義了在上一次方法執行完畢后到下一次開始執行的間隔時間,單位也是毫秒。不同于 fixedRate,fixedDelay 會等待前一次方法執行完成后才開始計時。
示例:

@Scheduled(fixedDelay = 1000) // 完成后1000毫秒再次執行

initialDelay

:這個參數用來定義延遲首次執行任務的時間,單位為毫秒。它通常與 fixedRate 或 fixedDelay 結合使用,用來設置啟動后延遲執行任務。
示例:

@Scheduled(fixedRate = 1000, initialDelay = 1000) // 啟動后延遲1000毫秒,之后每1000毫秒執行一次

zone

:用于指定 cron 表達式的時區,默認是服務器的本地時區。
示例:

   @Scheduled(cron = "0 15 10 * * ?", zone = "America/New_York") // 指定時區為紐約

使用 @Scheduled 注解需要在 Spring 配置中啟用定時任務(通過注解 @EnableScheduling)。這樣,Spring 的任務調度器就會自動識別使用了 @Scheduled 注解的方法,并根據設定的規則執行這些方法。

最后在啟動類上開啟該方法@EnableScheduling

多個服務導致資源沖突問題

當多個服務同時操作一個任務就會造成數據沖突,所以就需要分布式鎖,redis的setnx,無狀態,可共享,讀取塊就能成為很好的解決方案在這里插入圖片描述
redisssesion實現分布式鎖
也可以只有使用redis 上鎖方法

  public String tryLock(String name, long expire) {name = name + "_lock";String token = UUID.randomUUID().toString();RedisConnectionFactory factory = stringRedisTemplate.getConnectionFactory();RedisConnection conn = factory.getConnection();try {//參考redis命令:在redis中存入數據 數據明 uuid token 為鎖的名字
//            因為這個數據的名字都是name+_locak 所以每次調用加鎖方法setnx 只有一個成功調用的才能才能成功的保存的一個鎖數據,其他的只能無法設置//set key value [EX seconds] [PX milliseconds] [NX|XX]Boolean result = conn.set(name.getBytes(),token.getBytes(),Expiration.from(expire, TimeUnit.MILLISECONDS),RedisStringCommands.SetOption.SET_IF_ABSENT //NX);if (result != null && result)return token;} finally {RedisConnectionUtils.releaseConnection(conn, factory,false);}return null;}

方法調用
因為我的定時任務是每隔1minute 執行一次,所以每次上鎖30s,讓其他任務線程無法獲取,這里是統一名字實際業務開發,一個數據的操作可以使用一個數據的主鍵+前后綴來作為鎖名

@Scheduled(cron = "0 */1 * * * ?")public void refresh(){String token = cacheService.tryLock("FUTURE_TASK_SYNC", 1000 * 30);if(StringUtils.isNotBlank(token)){//。。。。。執行邏輯}}}

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

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

相關文章

【應用程序啟動過程-三種加載控制器的方式-上午內容復習 Objective-C語言】

一、我們先來回憶一下,上午所有內容 1.首先呢,我們先說的是這個“應用程序啟動過程”, 應用程序啟動過程里面,有三方面內容 1)UIApplication對象介紹 2)AppDelegate對象介紹 3)應用程序啟動過程 現在不知道大家對這個應用程序啟動過程有印象嗎, 2.首先,這個UIAp…

MySQL數據庫時間計算的用法

今天給大家分享如何通過MySQL內置函數實現時間的轉換和計算,在工作當中,測試人員經常需要查詢數據庫表的日期時間,但發現開發人員存入數據庫表的形式都是時間戳形式,不利于測試人員查看,測試人員只能利用工具對時間戳進…

【 順序表經典算法—移除元素和合并兩個有序數組】

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 前言 經典算法OJ題1: 移除元素 解法一、逐個判斷 解法二、雙指針覆蓋 經典算法OJ題2: 合并兩個有序數組 OJ題分為兩個類型: 總結 前言…

MAX/MSP SDK學習07:list傳遞

實現自定義Obejct,要求將傳入的一組數據100后傳出。 #include "ext.h" #include "ext_obex.h" typedef struct _listTrans {t_object ob;void* outLet;t_atom* fArr;long listNum;} t_listTrans;void* listTrans_new(t_symbol* s, long arg…

14.Python 模塊

目錄 1. 使用模塊2. 使用包3. 常用模塊3.1 日期和時間3.2 偽隨機數3.3 摘要算法3.4 JSON 處理3.5 圖像處理 模塊是Python用來組織代碼的一種方法,包是Python用來組織模塊的一種方法。 1. 使用模塊 Python 把能夠相互包含,且有組織的代碼段稱為模塊&…

.NET面試題1

1.什么是C#? C#(讀作"C sharp")是一種通用的、面向對象的編程語言,由Microsoft開發。它是一種靜態類型語言,支持強類型檢查和面向對象編程(OOP)的概念。C#主要用于開發Windows應用程序…

Bug等級劃分

Bug是指在程序或系統中存在的錯誤、缺陷或異常,是由于編碼錯誤、設計問題、邏輯錯誤或其他因素導致的。 常見的Bug分類方法 功能性Bug與軟件的功能有關,軟件無法正常工作、功能與需求不符或功能執行不正確。 用戶界面Bug與軟件的用戶界面有關&#xff…

Unity中Shader雙向反射分布函數BRDF

文章目錄 前言一、渲染方程二、什么是BxDF1、BSSRDF2、BRDF3、BTDF4、BSDF 三、迪士尼原則的BRDF四、迪士尼原則的BRDF的參數五、在Unity中看一下默認Shader的這些參數六、在這里記錄一下使用 Blender 和 SubstancePainter 的流程1、在Blender中導出模型為 .obj 格式2、在Subst…

Android WMS—— Surace管理 (二十)

WMS 負責創建 Surface 以及對 Surface 的擺放工作,之后將 Surface 提交給SurfaceFlinger 進行合并。在 App 層也創建了一個 Surface 對象,但是那個是空對象,用于 WMS 的填充。 一、Surface的創建 首先 APP 層在 ViewRootImpl 的 relayoutWindow() 方法中發起創建任務。 1、…

Go 實現網絡代理

使用 Go 語言開發網絡代理服務可以通過以下步驟完成。這里,我們將使用 golang.org/x/net/proxy 包來創建一個簡單的 SOCKS5 代理服務作為示例。 步驟 1. 安裝 golang.org/x/net/proxy 包 使用以下命令安裝 golang.org/x/net 包,該包包含 proxy 子包&am…

天軟特色因子看板 (2023.11 第12期)

該因子看板跟蹤天軟特色因子A05006(近一月單筆流入流出金額之比(%),該因子為近一個月單筆流入流出金額之比(%)均值因子,用以刻畫在 市場日內分時成交中流入、流出成交金額的差異性特點,發掘市場主力資金的作用機制。 今日為該因子跟蹤第12期&…

expect腳本在自動化部署中的具體應用案例

#expect腳本在自動化部署中的具體應用 expect腳本是一個非常好的交互式應用腳本,在自動化部署中,可以使用這個腳本來實現全自動的自動化部署。下面是一些具體的應用案例。 場景一:自動安裝mysql 可以使用expect腳本來實現mysql自動安裝&…

Windows平臺Unity下實現camera場景推送RTMP|輕量級RTSP服務|實時錄像

技術背景 我們在對接Unity平臺camera場景采集的時候,除了常規的RTMP推送、錄像外,還有一些開發者,需要能實現輕量級RTSP服務,對外提供個拉流的RTSP URL。 目前我們在Windows平臺Unity下數據源可采集到以下部分: 采集…

@PostConstruct雖好,請勿亂用

1.問題說明 在日常的業務開發中,有時會利用PostConstruct在容器啟動時執行一些任務。例如: PostConstruct public void init(){System.out.println("service 初始化..............."); }一般情況這沒什么問題,但最近一個同事在做…

ui5使用echart

相關的代碼已經發布到github上。 展示下相關的實現功能 1、柱狀圖-1 2、柱狀圖-2 3.折線圖 4.餅狀圖 如何使用: 使用git clone項目到本地 git clone https://github.com/linhuang0405/com.joker.Zechart找到index.html。在vscode里右鍵選擇Open with Live Serve…

1

【任務 1】私有云服務搭建[10 分] 【題目 1】基礎環境配置[0.5 分] 【題目 2】Yum 源配置[0.5 分] 【題目 3】配置無秘鑰 ssh[0.5 分] 【題目 4】基礎安裝[0.5 分] 【題目 5】數據庫安裝與調優[0.5 分] 【題目 6】Keystone 服務安裝與使用[0.5 分] 【題目 7】Glance 安裝與使用…

BLE通用廣播包

文章目錄 1、藍牙廣播數據格式2、掃描響應數據 1、藍牙廣播數據格式 藍牙廣播包的最大長度是37個字節,其中設備地址占用了6個字節,只有31個字節是可用的。這31個可用的字節又按照一定的格式來組織,被分割為n個AD Structure。如下圖所示&…

npm命令

node -v --查看版本 npm install --安裝npm npm config get registry --查看npm當前鏡像 npm config set registry https://registry.npmmirror.com --設置淘寶鏡像 npm版本管理工具

VS Code 如何搭建C/C++環境

目錄 一、VS Code是什么? 二、VS Code下載和安裝 2.1下載 2.2安裝 2.3環境介紹 三、Vs Code配置C/C環境 3.1下載和配置MinGW-w64編譯器套件 3.1.1下載 3.1.2配置 一、VS Code是什么? 跨平臺,免費且開源的現代輕量級代碼編輯器 Vis…

【MATLAB源碼-第85期】基于farrow結構的濾波器仿真,截止頻率等參數可調。

操作環境: MATLAB 2022a 1、算法描述 Farrow結構是一種用于實現可變數字濾波器的方法,尤其適用于數字信號處理中的采樣率轉換和時變濾波。它通過多項式近似來實現對濾波器系數的平滑變化,使得濾波器具有可變的群延時或其他參數。 Farrow結…