Spring Task 定時任務

文章目錄

  • Spring Task 定時任務
    • pom 包配置
    • 啟動類開啟定時
    • 創建定時任務實現類
      • 定時任務 1:
      • 定時任務 2:
    • 參數說明
      • fixedRate 說明
      • cron 說明
    • 并行任務

Spring Task 定時任務

在項目開發中,經常需要定時任務來幫助我們來做一些內容,比如定時派息、跑批對賬、業務監控等。

實現定時任務有 3 種方式:

  • java 自帶的 API:java.util.Timer 類和 java.util.TimerTask 類;

  • Quartz 框架:開源 功能強大 使用起來稍顯復雜;

  • Spring 3.0 以后自帶了 task 調度工具,也稱 Spring Task,它比 Quartz 更加的簡單方便。

pom 包配置

pom 包里面只需要引入 SpringBoot Starter 包即可,SpringBoot Starter 包中已經內置了定時的方法。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>
</dependency>

啟動類開啟定時

在啟動類上面加上 @EnableScheduling 即可開啟定時:

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

創建定時任務實現類

使用 SpringBoot 自帶的定時非常的簡單,只需要在方法上面添加 @Scheduled 注解即可。

定時任務 1:

@Component
public class SchedulerTask {private static final Logger log = LoggerFactory.getLogger(SchedulerTask.class);private int count = 0;@Scheduled(cron="*/6 * * * * ?")private void process() {log.info("{}", "this is scheduler task running " + (count++));}
}

設置 process() 每隔六秒執行一次,并統計執行的次數。

我們還有另外的一種方案來設置,固定時間周期執行方法。

定時任務 2:

@Component
public class Scheduler2Task {private static final Logger log = LoggerFactory.getLogger(Scheduler2Task.class);private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");@Scheduled(fixedRate = 6000)public void reportCurrentTime() {log.info("{}", "現在時間:" + dateFormat.format(new Date()));}
}

啟動項目之后,就會在控制臺看到打印的結果。

結果如下:

INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現在時間:20:12:02
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 0
INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現在時間:20:12:08
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 1
INFO [   scheduling-1] com.example.timingtask.Scheduler2Task    : 現在時間:20:12:14
INFO [   scheduling-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 2

說明兩個方法都按照固定 6 秒的頻率來執行。

參數說明

@Scheduled 參數可以接受兩種定時的設置,一種是我們常用的 cron="*/6 * * * * ?",一種是 fixedRate = 6000,兩種都可表示固定周期執行定時任務。

fixedRate 說明

  • @Scheduled(fixedRate = 6000) : 上一次開始執行時間點之后 6 秒再執行。
  • @Scheduled(fixedDelay = 6000) : 上一次執行完畢時間點之后 6 秒再執行。
  • @Scheduled(initialDelay=1000, fixedRate=6000) : 第一次延遲 1 秒后執行,之后按 fixedRate 的規則每 6 秒執行一次。

cron 說明

用來配置定時任務的時間表達式,通常用于在Unix/Linux系統中設置定時任務。
在Java應用程序中,Cron表達式也被廣泛使用,比如在Quartz調度框架中用來配置定時任務的觸發時間。Cron表達式由7個字段組成,分別表示秒、分鐘、小時、日期、月份、星期和年(可選)。
每個字段可以包含多個取值,以逗號分隔,或者可以使用通配符和范圍來表示時間。以下是Cron表達式的基本格式:plaintext
秒 分 時 日 月 星期 年
其中,各字段的取值范圍如下:秒(0-59)、分鐘(0-59)、小時(0-23)、日期(1-31)、月份(1-12或者 JAN-DEC)
星期(0-7或者 SUN-SAT,0和7都代表星期日)、年(可選,留空表示每年)。以下是一些常見的Cron表達式示例:
0 0 12 * * ?:每天中午12點觸發
0 0/5 * * * ?:每隔5分鐘觸發
0 0 8-10 * * ?:每天上午8點至10點之間每小時觸發
0 0 6,18 * * ?:每天早上6點和晚上6點觸發
0 0 9 ? * MON-FRI:周一至周五的早上9點觸發

并行任務

了解

之前的的定時任務都是串行執行的。所謂串行執行指的是只由一個線程來執行任務。除了這種方式 Spring Task 還支持并行執行任務,即由多個線程來執行不同的任務。

要實現這樣的功能,你需要去進行額外的配置:

@Configuration
@EnableScheduling
public class TimingTaskConfig implements SchedulingConfigurer, AsyncConfigurer {// 線程池線程數量private static final int corePoolSize = 5;@Beanpublic ThreadPoolTaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();scheduler.initialize(); // 初始化線程池scheduler.setPoolSize(corePoolSize); // 線程池容量return scheduler;}@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setTaskScheduler(taskScheduler());}@Overridepublic Executor getAsyncExecutor() {return taskScheduler();}@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return null;}
}

注意,這時 @EnableScheduling 注解標注在了這個配置類上,因此,Spring Boot 的入口類上就不再需要標注它了。(當然,你硬要把它標注在入口類上其實也可以)。

其它的相關代碼無需修改,運行項目你會看到類似如下的日志輸出:

INFO [taskScheduler-1] com.example.timingtask.Scheduler2Task    : 現在時間:20:08:57
INFO [taskScheduler-1] com.example.timingtask.SchedulerTask     : this is scheduler task running 0
INFO [taskScheduler-2] com.example.timingtask.Scheduler2Task    : 現在時間:20:09:03
INFO [taskScheduler-3] com.example.timingtask.SchedulerTask     : this is scheduler task running 1
INFO [taskScheduler-1] com.example.timingtask.Scheduler2Task    : 現在時間:20:09:09
INFO [taskScheduler-4] com.example.timingtask.SchedulerTask     : this is scheduler task running 2

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

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

相關文章

【并查集】專題練習

題目列表 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 模板 836. 合并集合 - AcWing題庫 #include<bits/stdc.h> using lllong long; //#define int ll const int N1e510,mod1e97; int n,m; int p[N],sz[N]; int find(int a) {if(p[a]!a) p[a]find(p[a]);return p[a…

第十八講:聯合和枚舉

第十八講&#xff1a;聯合和枚舉 1.聯合體&#xff08;共用體&#xff09;1.1聯合體的聲明1.2聯合體大小的計算1.3聯合體的特點1.4聯合體的使用1.4.1聯合體的直接使用1.4.2聯合體直接使用的優化方法1.4.3聯合體成員中含有數組的使用1.4.4使用聯合體判斷當前機器是大端排序&…

K8s(Kubernetes)常用命令

大家好&#xff0c;當談及容器編排工具時&#xff0c;Kubernetes&#xff08;常簡稱為K8s&#xff09;無疑是當今最受歡迎和廣泛使用的解決方案之一。作為一個開源的容器編排平臺&#xff0c;Kubernetes 提供了豐富的功能&#xff0c;可以幫助開發人員和運維團隊管理、部署和擴…

電商分析@電商數據與運營優化

電商數據分析與運營優化是指通過對電商平臺的各種數據進行深入分析&#xff0c;以發現潛在的問題和機會&#xff0c;并采取相應的優化措施&#xff0c;提高電商運營效率和盈利能力。 首先&#xff0c;電商數據分析需要收集和整理各類數據&#xff0c;包括銷售數據、用戶數據、流…

大宋咨詢(深圳車主滿意度調查)如何開展汽車展會觀眾滿意度問卷調查

汽車展覽是由政府機構、專業協會或主流媒體等組織,在專業展館或會場中心進行的汽車產品展示展銷會或汽車行業經貿交易會、博覽會等活動。汽車展覽通過對汽車工藝的呈現與汽車產品的廣告,為消費者提供汽車制造工業與汽車產品的發展動向。同時,汽車廠商可通過汽車展覽對外宣傳產品…

實戰16:基于apriori關聯挖掘FP-growth算法挖掘關聯規則的手機銷售分析-代碼+數據

直接看視頻演示: 基于apriori關聯挖掘關聯規則的手機銷售分析與優化策略 直接看結果: 這是數據展示: 挖掘結果展示: 數據分析展示:

利用WK2168實現串口服務器

ESP32 SPI與WK2168實現串口服務器 概述系統組成代碼概述 一些老設備通過RS485采集數據,如果在一個系統中采用幾個RS485設備可能是一個不錯的選擇,但要是使用46個RS485數據采集設備為一個PLC提供外部數據,系統的性能就很難有保障了。通過一個串口服務器實現看來是一個好的選…

智慧校園有哪些特征

隨著科技的飛速進步&#xff0c;教育領域正經歷著一場深刻的變革。智慧校園&#xff0c;作為這場變革的前沿代表&#xff0c;正在逐步重塑我們的教育理念和實踐方式。它不僅僅是一個概念&#xff0c;而是一個集成了物聯網、大數據、人工智能等先進技術的綜合生態系統&#xff0…

SpringBoot源碼(自動裝配、內嵌Tomcat)

文章目錄 依賴管理pom依賴管理Web依賴自定義starter 一、WebMvcAutoConfiguration1.1 Filter1.2 Interceptor 二、源碼解析2.1 SpringApplication2.1.1 構造方法1、填充webApplicationType2、自動裝配Initializers3、自動裝配Listeners 2.1.2 run(args) 2.2 SpringApplicationR…

手寫Mitt實現事件訂閱、發布和取消訂閱

Mitt類設計 emitter屬性&#xff1a;用于存儲事件和對應的處理器 on方法&#xff1a;訂閱事件 off方法&#xff1a;取消訂閱事件 emit方法&#xff1a;觸發事件 export class Mitt<T> {private readonly emitter: Record<string, Array<(value: T[keyof T]) …

AI邊緣計算盒子在智慧交通的應用

方案背景 隨著經濟增長&#xff0c;交通出行需求大幅增長&#xff0c;但道路建設增長緩慢&#xff0c;交通供需矛盾日益顯著&#xff0c;中心城區主要道路高峰時段交通擁堵嚴重&#xff0c;道路交通擁堵逐漸常態化&#xff0c;成為制約城市可持續發展的重要因素之一。 痛點問題…

web 前端開發技術---網頁的制作

這是一個網頁代碼 上年包含了電子郵件&#xff0c;選項建 等等 分享給大家 <!-- prj_7_1.html --> <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8"><title>留言板設計</title><style type&…

【C++】入門(一):命名空間、缺省參數、函數重載

目錄 一、關鍵字 二、命名空間 問題引入(問題代碼)&#xff1a; 域的問題 1.::域作用限定符 的 用法&#xff1a; 2.域的分類 3.編譯器的搜索原則 命名空間的定義 命名空間的使用 舉個&#x1f330;栗子&#xff1a; 1.作用域限定符指定命名空間名稱 2. using 引入…

【數據結構與算法 | 堆篇】JAVA實現小頂堆

1. 堆的特點 堆的邏輯結構是數組&#xff0c;內存結構是完全二叉樹.完全二叉樹即只有最后一層才有葉子節點.堆又分為大頂堆與小頂堆. 大頂堆的特點是 : 父親節點比孩子節點的都要大. 小頂堆的特點與其相反.Java的優先級隊列(PriorityQueue)的底層實現即用到了小頂堆. 所以下文…

K210視覺識別模塊學習筆記3:內存卡寫入拍攝圖片_LED三色燈的操作_按鍵操作_定時器的配置使用

今日開始學習K210視覺識別模塊: LED三色燈的操作_按鍵操作_定時器的配置使用_內存卡寫入拍攝圖片 亞博智能的K210視覺識別模塊...... 本文最終目的是編寫一個按鍵拍照的例程序&#xff1a; 為以后的專用場景的模型訓練做準備&#xff0c;因為訓練自己的模型需要大量的圖片&a…

jmeter基礎入門練習題

jmeter存在A,B兩個線程組的情況下&#xff0c;默認設置下&#xff0c;運行順序是&#xff1a;A A&#xff1a;A,B同時運行 B&#xff1a;先運行A&#xff0c;在運行B C&#xff1a;先運行A&#xff0c;等待2s運行B D:先A運行完&#xff0c;等待默認設置時間后運行B 下列說法正…

編譯安裝PHP服務(LAMP3)

目錄 1.初始化設置&#xff0c;將安裝PHP所需軟件包傳到/opt目錄下 &#xff08;1&#xff09;關閉防火墻 &#xff08;2&#xff09;上傳軟件包到/opt目錄 2.安裝GD庫和GD庫關聯程序&#xff0c;用來處理和生成圖片 3.配置軟件模塊 4.編譯及安裝 5.優化把PHP 的可執行程…

nginx的安裝001

Nginx是一款高性能的HTTP和反向代理服務器&#xff0c;以及郵件代理服務器&#xff0c;由 Igor Sysoev 開發并公開發布于2004年。Nginx以其高并發處理能力、低內存消耗和穩定性著稱&#xff0c;特別適合部署在高流量的網站上。 操作系統&#xff1a; CentOS Stream 9 安裝步驟…

【算法訓練 day44 分割等和子集】

目錄 一、分割等和子集-LeetCode 416思路實現代碼1.二維dp代碼2.一維dp代碼 問題總結 一、分割等和子集-LeetCode 416 Leecode鏈接: leetcode 416 文章鏈接: 代碼隨想錄 視頻鏈接: B站 給你一個 只包含正整數 的 非空 數組 nums 。請你判斷是否可以將這個數組分割成兩個子集&…

SQL入門教程,很詳細

SQL&#xff08;Structured Query Language&#xff09;是一種用于管理關系數據庫的標準語言。它被廣泛用于存儲、操作和檢索數據。在這篇文章中&#xff0c;我們將介紹SQL的基本概念和常用命令。 首先&#xff0c;我們需要了解SQL的基本結構。SQL語句通常由以下幾個部分組成&…