1. 程式人生 > >spring @scheduled 定時任務詳解

spring @scheduled 定時任務詳解

使用@scheduled定時任務有兩種方式,一種是直接@scheduled(cron=”0 0 0 ? * * “)
還有一種是使用xml配置

對於這兩種方式,首先需要在Spring配置檔案xmlns加入

xmlns:task="http://www.springframework.org/schema/task"

然後在xsi:schemaLocation中加入

  http://www.springframework.org/schema/task
     http://www.springframework.org/schema/task/spring-task-3.1.xsd"

Spring掃描註解的配置

<context:component-scan base-package="com.cym.bip" />

下面是第一種直接註解

    /**
     * 增量更新報表等快取,每5秒從時間表中查詢一次
     * @param 
     * @return
     */
    @Scheduled(fixedRate = 5000)
    public void cacheUpdate(){
    List<CacheEvent> reportEventList = reportDataService.getReportCacheEvents();
    }

這是第一種,直接使用註解@的方式進行了,然後另一種是使用xml配置
當然上面那些配置也需要
然後是


    <task:annotation-driven/>//這是使用xml方式的開關
    <task:scheduled-tasks scheduler="scheduler"> 
        <task:scheduled ref="ReportCacheTask" method="cacheUpdateSchedule"  cron="0 17 16 * * ?" />
    </task:scheduled-tasks>

    <task:scheduler
id="scheduler" pool-size="10" />
//注意這邊需要配置供掃描的包 <bean id="ReportCacheTask" class="com.cym.bip.report.data.cache.ReportCacheTask" />

這邊因為我只需要一個,所以就只在task:scheduled 裡添加了一個,可以繼續新增。諸如

 <task:scheduled ref="ReportCacheTask" method="cacheUpdateScheduleNew" initial-delay="5000" fixed-delay="5000"/>  

具體來說
ref是工作類
method是工作類中要執行的方法
initial-delay是任務第一次被呼叫前的延時,單位毫秒
fixed-delay是上一個呼叫完成後再次呼叫的延時
fixed-rate是上一個呼叫開始後再次呼叫的延時(不用等待上一次呼叫完成)
cron是表示式,表示在什麼時候進行任務排程。

對於cron表示式的解釋如下:

一個cron表示式有至少6個(也可能7個)有空格分隔的時間元素。
按順序依次為
秒(0~59)
分鐘(0~59)
小時(0~23)
天(月)(0~31,但是你需要考慮你月的天數)
月(0~11)
天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
年份(1970-2099)

其中每個元素可以是一個值(如6),一個連續區間(9-12),一個間隔時間(8-18/4)(/表示每隔4小時),一個列表(1,3,5),萬用字元。由於”月份中的日期”和”星期中的日期”這兩個元素互斥的,必須要對其中一個設定?.

“0 0 10,14,16 * * ?” 每天上午10點,下午2點,4點
“0 0/30 9-17 * * ?” 朝九晚五工作時間內每半小時
“0 0 12 ? * WED” 表示每個星期三中午12點
“0 0 12 * * ?” 每天中午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期間的每1分鐘觸發
“0 0/5 14 * * ?” 在每天下午2點到下午2:55期間的每5分鐘觸發
“0 0/5 14,18 * * ?” 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
“0 0-5 14 * * ?” 在每天下午2點到下午2:05期間的每1分鐘觸發
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44觸發
“0 15 10 ? * MON-FRI” 週一至週五的上午10:15觸發
“0 15 10 15 * ?” 每月15日上午10:15觸發
“0 15 10 L * ?” 每月最後一日的上午10:15觸發
“0 15 10 ? * 6L” 每月的最後一個星期五上午10:15觸發
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最後一個星期五上午10:15觸發
“0 15 10 ? * 6#3” 每月的第三個星期五上午10:15觸發

有些子表示式能包含一些範圍或列表

例如:子表示式(天(星期) )可以為 “MON-FRI”,“MON,WED,FRI”,“MON-WED,SAT”
“*”字元代表所有可能的值

因此,“”在子表示式(月 )裡表示每個月的含義,“”在子表示式(天(星期) )表示星期的每一天
“/”字元用來指定數值的增量

例如:在子表示式(分鐘)裡的“0/15”表示從第0分鐘開始,每15分鐘
在子表示式(分鐘)裡的“3/20”表示從第3分鐘開始,每20分鐘(它和“3,23,43”)的含義一樣
“?”字元僅被用於天(月)和天(星期)兩個子表示式,表示不指定值

當2個子表示式其中之一被指定了值以後,為了避免衝突,需要將另一個子表示式的值設為“?”
“L” 字元僅被用於天(月)和天(星期)兩個子表示式,它是單詞“last”的縮寫

但是它在兩個子表示式裡的含義是不同的。

在天(月)子表示式中,“L”表示一個月的最後一天

在天(星期)自表示式中,“L”表示一個星期的最後一天,也就是SAT

如果在“L”前有具體的內容,它就具有其他的含義了

例如:“6L”表示這個月的倒數第6天,“FRIL”表示這個月的最一個星期五

注意:在使用“L”引數時,不要指定列表或範圍,因為這會導致問題

欄位 允許值 允許的特殊字元

秒 0-59 , - * /

分 0-59 , - * /

小時 0-23 , - * /

日期 1-31 , - * ? / L W C

月份 1-12 或者 JAN-DEC , - * /

星期 1-7 或者 SUN-SAT , - * ? / L C #

年(可選) 留空, 1970-2099 , - * /

相關推薦

spring @scheduled 定時任務

使用@scheduled定時任務有兩種方式,一種是直接@scheduled(cron=”0 0 0 ? * * “) 還有一種是使用xml配置 對於這兩種方式,首先需要在Spring配置檔案xmlns加入 xmlns:task="http://www.

Spring定時任務例項[email protected]

最近在做專案,時間比較緊張,也有比較久沒寫部落格了。 現在專案的Redis快取需要用到定時任務,就學習了一下Spring 的@Scheduled註解。使用起來很簡單。 這個例子是建立在之前我的一篇部落格的例項上面的。 也就是架好了SSM框架。 SSM

spring定時任務(@Scheduled註解)

在springMVC裡使用spring的定時任務非常的簡單,如下: (一)在xml里加入task的名稱空間 xmlns:task="http://www.springframework.org/schema/task" http://www.spr

spring如何設定定時任務(@Scheduled)

目錄 一:註解方式配置定時任務: 二:@Scheduled 三:原理簡介 四:其他 以前用過這個註解實現定時任務,但是隻是使用,現在做專案又用到了這個功能,系統的學習一下~ spring定

crontab定時任務

文件 install 重新 init 設定 ntpdate 關閉 同步 星期 1、安裝crontab:yum install crontabs 說明:/sbin/service crond start //啟動服務/sbin/service crond stop //關閉

Linux 定時任務

什麽 file 同名 實現 link 打印 環境 grep 導入 fileclear.sh tamcdir=${HOME}/ora/user_projects/domains/tamc cd ${tamcdir} echo rm -f `ls heapdump*.phd

crond定時任務

ceo 開發 單用戶 init.d 管理 deny rest fin nta 首先來了解一下chkconfig這個命令: chkconfig命令檢查、設置系統的各種服務。這是Red Hat公司遵循GPL規則所開發的程序,它可查詢操作系統在每一個執行等級中會執行哪些系統服務,

springboot整合quartz定時器實現定時任務

最近需要 做一個按照時間,定時初始化一些資訊的功能,研究了一下quartz,也簡單瞭解一下TimerTask,廢話不多說。 quartz和TimerTask的區別: timer是jdk自帶的(可想而知,肯定是不怎麼好用)。 Quartz可以通過cron表示式精確到特定時間執行,而T

linux crontab定時任務

使用crontab你可以在指定的時間執行一個shell指令碼或者一系列Linux命令。例如系統管理員安排一個備份任務使其每天都執行 如何往 cron 中新增一個作業? # crontab –e0 5 * * * /root/bin/backup.sh 這將會在每天早上5點執行 /root/bin/bac

Linux中的Crontab定時任務

crontab介紹 在日常的專案開發中,我們有時候會需要定時的執行一些人物,比如資料庫備份,或者你的專案中的某個指令碼需要定期定時的去執行等等。那麼這些需求都可以所使用linux中crontab定時任務來完成。 Crontab: 用於設定週期性被執行的指令 該命令

一張圖讓你秒懂Spring @Scheduled定時任務的fixedRate,fixedDelay,cron執行差異

https://blog.csdn.net/applebomb/article/details/52400154   看字面意思容易理解,但是任務執行長度超過週期會怎樣呢? 不多說,直接上圖: 測試程式碼: import java.text.DateFormat; imp

spring @Scheduled 定時任務

@Service public class TimerTask{ private static final Logger logger = LoggerFactory.getLogger(TimerT

golang定時任務

在程式中經常需要按照指定的週期(以毫秒計)來呼叫函式或計算表示式,也即實現定時任務,使用time包中Tick和Sleep可以輕鬆實現定時任務 使用Tick每隔100毫秒列印“Hello TigerwolfC” for range time.Tick(time.Millisecond*10

玩轉SpringBoot之定時任務

pac multi mpi 例如 mark tor tro size har 序言 使用SpringBoot創建定時任務非常簡單,目前主要有以下三種創建方式: 一、基於註解(@Scheduled) 二、基於接口(SchedulingConfigurer) 前者相信

【系統學習SpringBoot】SpringBoot定時任務

強大的SpringBoot對定時任務這種常用的功能做了很好的封裝,,只需三步即可完成 一、新增依賴 pom.xml檔案中新增如下依賴: <dependencies> <dependency> <

Spring @Scheduled定時任務動態修改cron引數

  Spring框架自3.0版本起,自帶了任務排程功能,好比是一個輕量級的Quartz,而且使用起來也方便、簡單,且不需要依賴其他的JAR包。秉承著Spring的一貫風格,Spring任務排程的實現同時支援註解配置和XML配置兩種方式。   再來談談變態的專案需求:我們正在做一個智慧數字電錶的資料採集專案,

spring @scheduled 定時任務註解使用

Spring @scheduled 用法: 定時任務註解 需要新增的如下圖所示: 一、新增配置 1. xmlns:task="http://www.springframework.org/schema/task" 2. http://www.springframe

java定時任務

需求:定時傳送郵件,定時採集資訊,定時分析日誌。。等等需要按規律定時觸發的函式。 前提環境 Spring+Struts2開發框架 檔案結構如下: handler的類就是定時任務將要觸發的類,而resources包中的4個配置檔案分別為:

linux下新增定時任務 示例

linux下定時執行任務的方法 在Linux中你應該先輸入crontab -e,然後就會有個vi編輯介面,再輸入0 3 * * 1 /clearigame2內容到裡面 :wq 儲存退出。 在LINUX中,週期執行的任務一般由cron這個守護程序來處理[ps -ef|grep cron]。cron讀取一個或

PHP Yii 命令列程式以及定時任務

為啥要編寫命令列程式? 命令列程式通常是一個指令碼,但是PHP Yii 是web開發語言,如何能開發指令碼程式? 所以,首先我們要明白使用PHP Yii 編寫指令碼語言的目的和原理。 目的 設想這麼一