Spring定時任務之用法說明
一.分類
從實作的技術上來分類,目前主要有三種技術:
Java自帶的java. util.Timer類,這個類別允許你調度一個java.util.TimerTask任務。使用這種方式可以讓你的程式依照某一個頻度執行,但不能在指定時間運作。
使用Quartz,這是一個功能比較強大的的調度器,可以讓你的程式在指定時間執行,也可以按照某一個頻度執行,配置起來稍顯複雜。
Spring3.0以後自帶的task,可以將它看成一個輕量級的Quartz,而且使用起來比Quartz簡單許多。
從作業類別的繼承方式來講,可以分成兩類:
作業類別需要繼承自特定的作業類基底類,如Quartz需要繼承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要繼承自java.util.TimerTask。
作業類別即普通的java類,不需要繼承自任何基底類別。
註:個人建議使用第二種方式,因為這樣所以的類別都是普通類,不需要事先區別對待。
從任務排程的觸發時機來分,這裡主要是針對作業使用的觸發器,主要有以下兩種:
每隔指定時間則觸發一次,在Quartz中對應的觸發器為:org.springframework.scheduling.quartz.SimpleTriggerBean
#每到指定時間則觸發一次,在Quartz中對應的調度器為:org.springframework.scheduling.quartz.CronTriggerBean
第一步:定義作業類別
#import org.quartz.JobExecutionContext;
##import org.quartz.JobExecutionException; ##import org.quartz.JobExecutionException; ##import org.quartz.JobExecutionException;
-
但是
#import org.springframework.scheduling.quartz.QuartzJobBean; -
#public
class Job1 - extends Quartz
public class Job1 ##JobbJobBeanfQuartzpublic
class Job1 #Job#JobBeanf { #private #int timeout;
-
#private
static - int i =
0;
bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean">
property #name= "jobClass" value="com.gy.Job1" />
property name="jobDataAsMap">
#map>
entry key="timeout" value="0" />
-
##map#>
property>
##bean>
- 第三個步驟:設定作業排程的觸發方式(觸發器)
#Quartz的作業觸發器有兩種,分別是org .springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling.quartz.CronTriggerBean第一種SimpleTriggerBean,只支援依照一定頻率呼叫任務,如每隔30分鐘執行一次。 設定方式如下:
Xml程式碼 bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
##property name="jobDetail" #ref= "job1" />
-
#property
name= "startDelay"
/>
bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
property #name= "jobDetail" ref="job1" />
>
property # name="cronExpression" value="0 0 12 * * ?" /> 1
#bean>
關於cronExpression表達式的語法請參考附錄。
第四步:設定調度工廠
#bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
property name="triggers">
-
#list>
#ref bean="cronTrigger" />
- #
list>
>
#
bean>
# 說明:此參數指定的是先前設定的觸發器的名字。 第五步:啟動你的應用程式即可,即將工程部署至tomcat或其他容器。
-
- Spring能夠支援這種方式,歸功於兩個類別:org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
- org.springframework.scheduling.quartz.MethodInvoeanJobDetailFactoryB#org.springframework.scheduling.quartz.MethodInvoeanJobDetailFactoryB1Bean.
##這兩個類別分別對應spring支援的兩種實作任務調度的方式,即前文提到到java自帶的timer task方式和Quartz方式。這裡我只寫MethodInvokingJobDetailFactoryBean的用法,使用該類的好處是,我們的任務類不再需要繼承自任何類,而是普通的pojo。
Java程式碼
bean id="job2"
-
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
# #property name="targetObject">
##bean
class=- "com.gy.Job2"
/> #property>
- ##property name="targetMethod" value="doJob2" />
#property
name=
"concurrent"value=
"false"/>
##bean>
# 說明:這一步是關鍵步驟,聲明一個MethodInvokingJobDetailFactoryBean,有兩個關鍵屬性:targetObject指定任務類,targetMethod指定執行的方法。往下的步驟就與方法一相同了,為了完整,同樣貼出。 第三個步驟:設定作業排程的觸發方式(觸發器)#Quartz的作業觸發器有兩種,分別是org .springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling.quartz.CronTriggerBean第一種SimpleTriggerBean,只支援依照一定頻率呼叫任務,如每隔30分鐘執行一次。 設定方式如下:
- Xml程式碼
bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
##」 -
#property
name= "jobDetail"
/>
bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
property #name= "jobDetail" ref="job2" />
##> property # name="cronExpression" value="0 0 12 * * ?" />
-
1
# bean
-
#Xml程式碼 #bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
> -
property name="triggers"
> #list> #ref
bean=- "cronTrigger"
/>
-
#list
>
property
>
#
bean>
import org.springframework.stereotype.Service;
@Service
#public class TaskJob {
public void job1() {
System.out.println(“任務進行中。。。”);
}
}
第二步驟:在spring設定檔頭中新增命名空間及描述
beans #xmlns= "http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
# 。 。 。 。 。 。
xsi:schemaLocation="http://www.springframework.org/schema/task "#>
第三步驟:在spring設定檔中設定特定的任務
## task:scheduled-tasks>
- #task:scheduled ref="taskJob" #method="job1" cron=##"0 #method="job1" cron=##"0 * * * ?" />
@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})
-
-
#@Documented
- public
- @interface Scheduled
{
-
public
abstract String cron()# public
abstract String cron() ;
#
public
-
## public abstract
long fixedRate(); }
- # 可以看出註解有三個方法或稱呼參數,分別表示的意思是:
cron:指定cron表達式fixedDelay:官方文件解釋:An interval-based trigger where the interval is measured from the completion time of the previous task. The time unit value is measured in milliseconds.即表示從上一個任務完成開始到下一個任務開始的間隔,單位是毫秒。
fixedRate:官方文件解釋:An interval-based trigger where the interval is measured from the start time of the previous task. The time unit value is measured in milliseconds.即從上一個任務開始到下一個任務開始的間隔,單位是毫秒。 -
下面我來設定一下。 第一步:寫pojo
Java程式碼
- #Java程式碼
-
import org.springframework.stereotype.Component;
##xml version="1.0" encoding="UTF-8"?>
##beans xmlns= “ http://www.springframework.org/schema/beans”
xmlns:xsi= " http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
#xmlns:context="http://www.springframework.org/schema/context"
# #xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
- ## xsi:schemaLocation =
## " “假”>
-
context:annotation-config />; > ##
#context:component-scan - base-package=
"com.gy.mytask" #/> ; ##>
說明:理論上只需要加上
Ok配置完畢,當然spring task還有很多參數,我就不一一解釋了,具體參考xsd文件。
附錄:
cronExpression的設定說明,具體使用以及參數請百度google
欄位 允許值允許的特殊字元
秒 0-59 , - * /
分 0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / L W C##o1 -12 或JAN-DEC , - * /
#星期 1-7 或SUN-SAT , - * ? / L C
#。 (可選) 留空, 1970-2099 , - * /
- 區間
#* 萬用字元
* 通配符
#? 你不想設定那個欄位
下面隻例出幾個式子
CRON表達式 意義
"0 0 12 * * ?" 每天中午十二點觸發
"0 15 10 ? * *" 每天早上10:15觸發
"0 15 10 * * ?" 每天早上10:15觸發
"0 15 10 * * ? * " 每天早上10:15觸發
"0 15 10 * * ? 2005" 2005年的每天早上10:15觸發
#" 0 * 14 * * ?" 每天從下午2點開始到2點59分每分鐘一次觸發
"0 0/5 14 * * ?" 每天從下午2點開始到2:55分結束每5分鐘一次觸發
"0 0/5 14,18 * * ?" 每天的下午2點至2:55和6點至6點55分兩個時間內每5分鐘一次觸發
"0 0-5 14 * * ?" 每天14:00至14:05每分鐘一次觸發 ##### ########"0 10,44 14 ? 3 WED" 三月的每週三的14:10和14:44觸發 #############"0 15 10 ? * MON-FRI" 每週一、二、三、四、五的10:15觸發 ######
以上是Spring定時任務之用法說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

mdf檔案和mds檔案怎麼用隨著電腦科技的不斷進步,我們可以透過多種方式來儲存和共享資料。在數位媒體領域,我們經常會遇到一些特殊的文件格式。在這篇文章中,我們將討論一種常見的文件格式—mdf和mds文件,並介紹它們的使用方法。首先,我們需要了解mdf檔案和mds檔案的含義。 mdf是CD/DVD鏡像檔的副檔名,而mds檔則是mdf檔的元資料檔。

CrystalDiskMark是一款適用於硬碟的小型HDD基準測試工具,可快速測量順序和隨機讀取/寫入速度。接下來就讓小編為大家介紹一下CrystalDiskMark,以及crystaldiskmark如何使用吧~一、CrystalDiskMark介紹CrystalDiskMark是一款廣泛使用的磁碟效能測試工具,用於評估機械硬碟和固態硬碟(SSD)的讀取和寫入速度和隨機I/O性能。它是一款免費的Windows應用程序,並提供用戶友好的介面和各種測試模式來評估硬碟效能的不同方面,並被廣泛用於硬體評

foobar2000是一款能隨時收聽音樂資源的軟體,各種音樂無損音質帶給你,增強版本的音樂播放器,讓你得到更全更舒適的音樂體驗,它的設計理念是將電腦端的高級音頻播放器移植到手機上,提供更便捷高效的音樂播放體驗,介面設計簡潔明了易於使用它採用了極簡的設計風格,沒有過多的裝飾和繁瑣的操作能夠快速上手,同時還支持多種皮膚和主題,根據自己的喜好進行個性化設置,打造專屬的音樂播放器支援多種音訊格式的播放,它還支援音訊增益功能根據自己的聽力情況調整音量大小,避免過大的音量對聽力造成損害。接下來就讓小編為大

MetaMask(中文也叫小狐狸錢包)是一款免費的、廣受好評的加密錢包軟體。目前,BTCC已支援綁定MetaMask錢包,綁定後可使用MetaMask錢包進行快速登錄,儲值、買幣等,且首次綁定還可獲得20USDT體驗金。在BTCCMetaMask錢包教學中,我們將詳細介紹如何註冊和使用MetaMask,以及如何在BTCC綁定並使用小狐狸錢包。 MetaMask錢包是什麼? MetaMask小狐狸錢包擁有超過3,000萬用戶,是當今最受歡迎的加密貨幣錢包之一。它可免費使用,可作為擴充功能安裝在網絡

Spring+AI作為行業領導者,透過其強大、靈活的API和先進的功能,為各種行業提供了領先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領域的應用範例,每個案例都將展示Spring+AI如何滿足特定需求,實現目標,並將這些LESSONSLEARNED擴展到更廣泛的應用。希望這個專題能對你有所啟發,更深入地理解和利用Spring+AI的無限可能。 Spring框架在軟體開發領域已經有超過20年的歷史,自SpringBoot1.0版本發布以來已有10年。現在,無人會質疑,Spring

網易郵箱,作為中國網友廣泛使用的一種電子郵箱,一直以來以其穩定、高效的服務贏得了用戶的信賴。而網易信箱大師,則是專為手機使用者打造的信箱軟體,它大大簡化了郵件的收發流程,讓我們的郵件處理變得更加便利。那麼網易信箱大師該如何使用,具體又有哪些功能呢,下文中本站小編將為大家帶來詳細的內容介紹,希望能幫助到大家!首先,您可以在手機應用程式商店搜尋並下載網易信箱大師應用程式。在應用寶或百度手機助手中搜尋“網易郵箱大師”,然後按照提示進行安裝即可。下載安裝完成後,我們打開網易郵箱帳號並進行登錄,登入介面如下圖所示

在如今雲端儲存已成為我們日常生活和工作中不可或缺的一部分。百度網盤作為國內領先的雲端儲存服務之一,憑藉其強大的儲存功能、高效的傳輸速度以及便捷的操作體驗,贏得了廣大用戶的青睞。而且無論你是想要備份重要文件、分享資料,還是在線上觀看影片、聽取音樂,百度網盤都能滿足你的需求。但很多用戶可能對百度網盤app的具體使用方法還不了解,那麼這篇教學就將為大家詳細介紹百度網盤app如何使用,還有疑惑的用戶們就快來跟著本文詳細了解一下吧!百度雲網盤怎麼用:一、安裝首先,下載並安裝百度雲軟體時,請選擇自訂安裝選

隨著網路科技的快速發展,我們的生活也得到了極大的便利,其中之一就是能夠透過網路下載和分享各種資源。而在下載資源的過程中,磁力連結成為了一種非常常見且方便的下載方式。那麼,迅雷磁力連結又是如何使用的呢?下面,我將給大家詳細介紹一下。迅雷是一款非常受歡迎的下載工具,它支援多種下載方式,其中包括磁力連結。磁力連結可以理解為一種下載位址,透過它我們可以取得資源的相關
