首頁 Java java教程 Java中Spring使用Quartz任務調度定時器

Java中Spring使用Quartz任務調度定時器

Feb 07, 2017 pm 03:09 PM

Quartz 任務調度是什麼

Quartz 是 OpenSymphony 開源組織在 Job scheduling 領域又一個開源項目,它可以與 J2EE 與 J2SE 應用程式相結合也可以單獨使用。 Quartz 是一個完全由 Java 編寫的開源作業排程框架。不要讓作業調度這個術語嚇你。儘管Quartz框架整合了許多額外功能,但就其簡易形式來看,你會發現它易用得簡直讓人受不了!

其實,他還是沒有解釋明白,我簡單說一下:Quartz 作業調度就是可以實現定時任務。它可以實現類似Windows 的任務計劃、我們.Net 下的Windows 服務實現的定時任務等,而且,它與Spring 框架結合起來用起來簡單到爆,爽的受不了,除了時間設定比較晦澀一點...這不重要,待會兒告訴你解決方案。

現在有一個需求:用戶在我們系統完成某個操作,我們用金幣回饋用戶,不過不是即時充值給用戶,考慮性能問題,我們用非同步或我們打算在凌晨一點統一充值到用戶帳戶,因為這個時段用戶比較少。你會怎麼做?

一、新增一個GoldQuartz.java檔

當然你可以跟我一樣,新增一個cn.mayongfa.quartz Package 包,專門用來放執行定時任務的類別。

這個類的目的是用來定時自動給用戶加金幣的。

@Component
public class GlodQuartz {
 
 /**
  * 用户自动加金币
  * 每天凌晨一点执行一次
  */
 @Scheduled(cron = "0 0 1 * * ? ")
 public void addUserGold() {
  System.out.println("凌晨一点了,你睡了么?");
 }
 
 /**
  * 每隔5秒定时清理缓存
  */
 @Scheduled(cron = "*/5 * * * * ? ")
 public void cacheClear() {
  System.out.println("时间又过去5秒了,真令人伤感...");
 }
}
登入後複製

就完成了?嗯,是的,就這麼簡單。主要涉及到@Scheduled的cron是什麼意思,下面會講怎麼寫和怎麼自動生成,因為現在這樣你完全看不明白。

二、設定springMVC-servlet.xml檔

<!-- 扫描定时作业调度包 -->
<task:annotation-driven />
<context:component-scan base-package="cn.mayongfa.quartz"/>
登入後複製

到這其實就這麼簡單就完成了!好用的受不了。配置這個有一個前提是你的xml 檔案的beans聲明中要有:

xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
 http://www.springframework.org/schema/task
 http://www.springframework.org/schema/task/spring-task.xsd"
登入後複製

運行查看結果

Java中Spring使用Quartz任務調度定時器

到這裡你就可以根據自己的需求去完成自己想要執行的計時任務了。那我就來仔細講講@Scheduled的cron是什麼意思?
Cron 表達式包含以下 7 個欄位:秒、分、小時、月內日期、月、週內日期、年(選用欄位)。

Cron 觸發器也利用一系列特殊字元:

反斜線(/)字元表示增量值。例如,在秒字段中「5/15」代表從第 5 秒開始,每 15 秒一次。

問號(?)字元和字母 L 字元只有在月內日期和周內日期欄位中可用。問號表示這個欄位不包含具體值。所以,如果指定月內日期,可以在周內日期欄位插入“?”,表示週內日期值無關緊要。字母 L 字元是 last 的縮寫。放在月內日期欄位中,表示安排在當月最後一天執行。在周內日期欄位中,如果“L”單獨存在,就等於“7”,否則代表當月內週內日期的最後一個實例。所以「0L」表示安排在當月的最後一個星期日執行。

在月內日期欄位中的字母(W)字元把執行安排在最靠近指定值的工作日。把「1W」放在月內日期欄位中,表示把執行安排在當月的第一個工作天內。

井號(#)字元為給定月份指定具體的工作日實例。把「MON#2」放在周內日期欄位中,表示把任務安排在當月的第二個星期一。

星號(*)字符是通配字符,表示該字段可以接受任何可能的值。

總結一下

當你需要定時執行一些程式碼的時候,你就可以用到作業調度了,Quartz 就是為這個而生的,而且它和 Spring 結合起來非常方便。讓你程式碼寫的飛快,Quartz 還是前幾天我們專案組一個同事告訴我的,我使用了一下,我就被他折服了。

更多Java中Spring使用Quartz任務調度定時器相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致應用無法運行?如何排查和解決? 公司安全軟件導致應用無法運行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

如何使用MapStruct簡化系統對接中的字段映射問題? 如何使用MapStruct簡化系統對接中的字段映射問題? Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

如何優雅地獲取實體類變量名構建數據庫查詢條件? 如何優雅地獲取實體類變量名構建數據庫查詢條件? Apr 19, 2025 pm 11:42 PM

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

如何將姓名轉換為數字以實現排序並保持群組中的一致性? 如何將姓名轉換為數字以實現排序並保持群組中的一致性? Apr 19, 2025 pm 11:30 PM

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? IntelliJ IDEA是如何在不輸出日誌的情況下識別Spring Boot項目的端口號的? Apr 19, 2025 pm 11:45 PM

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對像如何安全地轉換為數組? Java對像如何安全地轉換為數組? Apr 19, 2025 pm 11:33 PM

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? 電商平台SKU和SPU數據庫設計:如何兼顧用戶自定義屬性和無屬性商品? Apr 19, 2025 pm 11:27 PM

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名構建查詢條件? 使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名構建查詢條件? Apr 19, 2025 pm 09:51 PM

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...

See all articles