SpringBoot 定時任務+Quartz

  • 1、分部解釋
  • 2、整體代碼

前言:

1、定時任務技術:

  • JDK 的 Timer, 定義多個定時任務,其中某個任務出現異常,當時整個定時任務終止。
  • Spring Task , 不支持 持久化與分布式部署,所有任務是單線程執行的
  • Quartz,支持持久化多線程執行。

2、Spring Boot 整合Quartz

  • Job: 任務。定時執行的具體任務內容
  • JobDetail: 任務詳情。即與任務相關的其他配置信息
  • Trigger: 觸發器,主要負責描述任務執行的時間規則
  • Scheduler: 調度器。
  • 將Job和Trigger整合起來之間的關系: Job:JobDetail->1:N JobDetail:Trigger->1:N Trigger:JobDetail->1:1
    在這里插入圖片描述

3、引入pom文件:

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

4、創建執行任務,Job (自己的定時任務)

對應代碼:

@Slf4j
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class MyJob extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("任務開始執行");JobDetail jobDetail = context.getJobDetail();System.out.println("名字" + jobDetail.getKey().getName());System.out.println("類名--->" + jobDetail.getJobClass().getName());System.out.println("本次執行的時間為---》" + context.getFireTime());System.out.println("下次執行的時間為---》" + context.getNextFireTime());System.out.println("任務執行完畢");System.out.println("============================");}
} 

5、創建JobDtail 和 Trigger

在這里插入圖片描述
在執行任務的類上添加注解。

  • PersistJobDataAfterExecution ,有狀態的,在定時任務執行的Job中獲取的JobExecutionContext 是同一個。比如在JobDetail 中,usingJobData(“count”,1);進行共享數據的初始化,如果不使用這個注解在執行任務上,會獲取不同的JobExecutionContext 。
  • DisallowConcurrentExecution 在時間間隔內,如果本任務沒有執行完成,下一個任務不會啟動,一直到本任務結束。下一個任務才開始執行。

創建配置類:

在這里插入圖片描述
解釋:

持久化 .storeDurably() 。如果沒有持久化,沒有對應的觸發器,失去執行的條件,存在沒有意義,就會將其刪除。
如果有持久化,沒有對應的觸發器,還是會保留 JobDetail。

對應代碼:

@Configuration
public class QuartzConfiguration {//JobDetail@Bean(value = "jobDetail")public JobDetail jobDetail(){return JobBuilder.newJob(MyJob.class).storeDurably()//唯一標識.withIdentity("jobDetail").build();}@Bean// @Qualifier 引用指定的bean 的實例對象。public Trigger trigger(@Qualifier("jobDetail")JobDetail jobDetail){Trigger jobDetail1 = TriggerBuilder.newTrigger().forJob(jobDetail)//唯一標識和上面的JobDetail是配對的。.withIdentity("jobDetail")//這個表達式可以寫到yml 中進行引用,這樣以后更改直接改配置文件即可。//每兩秒鐘執行一次.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();return jobDetail1;}}

6、cron表達式

在這里插入圖片描述

tips:一般使用 六位,最后一位年 一般不使用。

整體代碼實例演示:

pom文件

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

1、自己的定時任務Job

@Slf4j
@DisallowConcurrentExecution
@PersistJobDataAfterExecution
public class MyJob extends QuartzJobBean {@Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("任務開始執行");JobDetail jobDetail = context.getJobDetail();System.out.println("名字" + jobDetail.getKey().getName());System.out.println("類名--->" + jobDetail.getJobClass().getName());System.out.println("本次執行的時間為---》" + context.getFireTime());System.out.println("下次執行的時間為---》" + context.getNextFireTime());System.out.println("任務執行完畢");System.out.println("============================");}
} 

2、定時任務的配置類

@Configuration
public class QuartzConfiguration {//JobDetail@Bean(value = "jobDetail")public JobDetail jobDetail(){return JobBuilder.newJob(MyJob.class).storeDurably()//唯一標識.withIdentity("jobDetail").build();}@Bean//Triggerpublic Trigger trigger(@Qualifier("jobDetail")JobDetail jobDetail){Trigger jobDetail1 = TriggerBuilder.newTrigger().forJob(jobDetail)//唯一標識和上面的JobDetail是配對的。.withIdentity("jobDetail")//這個表達式可以寫到yml 中進行引用,這樣以后更改直接改配置文件即可。//每兩秒鐘執行一次.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build();return jobDetail1;}}

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

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

相關文章

Prism 入門01,基礎

Prism 框架是支持多平臺的一種MVVM框架(Model-View-ViewModel) 除了具備一些基礎的屬性通知綁定,命令操作,消息聚合器等功能外。還具備一些強大的功能:例如,區域,導航,會話服務,模塊注入等特性。 一.如何在WPF 項目中使用Prism 框架 1.打開Visual Studio 2022,選擇創…

初探Arthasan安裝使用

最近在項目中用到 Arthas&#xff0c;即阿爾塞斯 是阿里開源的Java分析工具。 下載地址&#xff1a;Github 一、安裝運行 1&#xff09;window 系統 下載 jar 包&#xff0c;直接通過java命令運行 // 下載 jar包 curl -O https://arthas.aliyun.com/arthas-boot.jar // 啟動…

3個常用的Python性能分析工具及其使用方法

以下是幾個常用的性能分析工具及其使用方法和常用命令&#xff1a; 1. cProfile cProfile是Python標準庫中的性能分析工具&#xff0c;可以用來統計函數的運行時間和調用次數。 使用方法&#xff1a; 在命令行中使用以下命令&#xff1a; python -m cProfile my_script.py…

【排序】選擇排序(含優化版)

本章我們繼續講排序算法&#xff0c;這里我們將學習選擇排序&#xff0c;也是一個很普遍很常見的排序算法&#xff0c;邏輯和代碼都比較簡單&#xff0c;比較容易掌握&#xff0c;我們直接走起 選擇排序 基本思想&#xff1a;選擇排序&#xff08;SelectSort&#xff09;&…

Layui2.5.6樹形表格TreeTable使用

1、問題概述? Layui2.5.6的樹形表格-TreeTable終于用明白了,步驟詳細,提供源碼下載。 如果你使用的是Layui2.8+版本,那么點個贊,趕緊去官網看吧,官網更行了。 更新地址:樹表組件 treeTable - Layui 文檔 最近在項目中需要使用到樹形表格,用來顯示菜單的層級關系,當…

(delphi11最新學習資料) Object Pascal 學習筆記---第14章泛型第1節(泛型鍵值對)

14.1.1 內聯變量和泛型類型推斷 ? 在聲明泛型變量時&#xff0c;聲明可能相當長。在創建該類型的對象時&#xff0c;必須重復相同的聲明。除非您利用內聯變量聲明及其變量類型推斷的能力。因此&#xff0c;上面最后一個代碼片段可以寫成&#xff1a; beginvar Kvi : TKeyVal…

Leetcode 第 398 場周賽題解

Leetcode 第 398 場周賽題解 Leetcode 第 398 場周賽題解題目1&#xff1a;3151. 特殊數組 I思路代碼復雜度分析 題目2&#xff1a;3152. 特殊數組 II思路代碼復雜度分析 題目3&#xff1a;3153. 所有數對中數位不同之和思路代碼復雜度分析 題目4&#xff1a;3154. 到達第 K 級…

辯證 邏輯學 | 洞察 事物矛盾及變化規律 在形式邏輯基礎上 學會辯證思維(40節課)

課程下載&#xff1a;辯證邏輯學洞察事物矛盾及變化規律在形式邏輯基礎上學會辯證思維&#xff08;40節課&#xff09;-課程網盤鏈接提取碼下載.txt資源-CSDN文庫 更多資源下載&#xff1a;關注我。 在形式邏輯的基礎上&#xff0c;學會 辯證思維 敏銳 洞察事物發展變化的規…

Linux命令篇(一):文件管理部分

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;歡迎各位來到我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里不僅可以有所收獲&#xff0c;同時也能感受到一份輕松歡樂的氛圍&#xff0c;祝你生活愉快&#xff01; 文章目錄 1、cat命令常用參…

童趣盎然,米香四溢 —— 蒙自源六一兒童節特別獻禮

充滿歡聲笑語的六一兒童節馬上就要來了&#xff0c;在這個充滿童真和喜悅的時刻&#xff0c;蒙自源米線品牌以一顆童心&#xff0c;為所有大朋友和小朋友準備了一份特別的禮物。 從5月25日開始&#xff0c;蒙自源誠摯邀請您和孩子們一同前往蒙自源旗下各大門店&#xff0c;品嘗…

【MySQL數據庫】MySQL 高可用搭建方案——MHA實戰

MHA&#xff08;Master High Availability&#xff09; MHA實戰 MHA&#xff08;Master High Availability&#xff09; 一、MHA簡介二、MHA搭建準備要求&#xff1a;mha集群搭建&#xff0c;4臺服務器&#xff0c;1主2從&#xff0c;1臺mha2.1實驗思路2.2實驗準備 三、搭建MyS…

每日一題31:數據統計之即時配送食物

一、每日一題 配送表: Delivery -------------------------------------- | Column Name | Type | -------------------------------------- | delivery_id | int | | customer_id | int | | order_date …

HTML5常用標簽表格

04-08、表格標簽table 概述 表格&#xff1a;是一種行和列組合而成的單元格。一般應用于后臺網頁設計管理數據使用。 表格的架構部分&#xff1a; tabletable head 表格頭 theadtable body - 表格體 tbodytable foot -表格的頁腳 tfoot 表格的基本組成部分&#xff1a; t…

Bluetooth Profiles,藍牙配置文件對應設備

下面的常量是藍牙各種配置文件的標識符。 每個常量代表一個特定的藍牙配置文件&#xff0c;這些配置文件定義了藍牙設備之間通信的特定方式。以下是每個常量的解釋&#xff1a; HEADSET (1): 代表耳機和免提配置文件&#xff0c;通常用于藍牙耳機或車載免提系統。A2DP (2): 代…

opencv-python(三)

馬賽克 face img[162:428,297:527] # 人臉坐標區域face face[::10,::10] # 每10個中取出一個像素&#xff0c;馬賽克face np.repeat(face, 10, axis0) # 行方向重復10次face np.repeat(face, 10, axis1) # 列方向重復10次img[162:428,297:527] face[:266,:230] # 填充&a…

計算機科學與技術和軟件工程專業有什么區別?應該怎么選?

計算機科學與技術和軟件工程都是就業前景較好的計算機類專業&#xff0c;二者密切相關但側重點不同&#xff0c;同學們應該如何選擇呢&#xff1f; 一、學習內容 1.學科定位 ● 計算機科學與技術 側重于計算機科學的理論研究和基礎技術&#xff0c;包括算法、數據結構、人工…

lnmp平臺部署web應用,安裝Discuz社區平臺詳細文章——更新中

Nginx網站service 詳細相關介紹-特點-http狀態碼-配置文件、將nginx添加永久環境變量 訪問網站404是什么&#xff1f;_nginx 穩定版-CSDN博客文章瀏覽閱讀1.2k次&#xff0c;點贊33次&#xff0c;收藏24次。開源Web服務器軟件。_nginx 穩定版https://blog.csdn.net/2301_771619…

數據結構--數組(詳細分析)

目錄 &#x1f349;引言 &#x1f349;數組 &#x1f348;數組的特性 &#x1f348;數組的優缺點 &#x1f34d;優點&#xff1a; &#x1f34d;缺點&#xff1a; &#x1f348;數組的聲明與初始化 &#x1f348;數組的常見操作 &#x1f34d; 插入操作 &#x1f34d;…

Touch Camera PRO 2024 Easy Mobile Desktop Camera Controller(觸控相機專業版)

一個真正易于使用的移動+臺式攝像機控制器,具有視角切換功能! Touch Camera PRO 是一款非常易于使用的移動+桌面相機控制器,具有透視切換功能!它在 Home Designer、Runtime Level Editor 和 Floor Map Designer 等其他插件中使用! 在桌面和移動設備上工作! 一個干…

WIireShark使用教程

文章目錄 目錄 文章目錄 一.入門抓包示例 一.入門抓包示例 先介紹一下如何使用wireshark抓取相應網卡的流量&#xff0c;讓讀者可以先上手操作感受一下抓包的具體過程。 1.打開wireshark的主界面如下 2.選擇需要抓包的網卡&#xff0c;鼠標左鍵雙擊&#xff0c;即可抓取該網…