摘要:表示起始時(shí)間開始觸發(fā),然后每隔固定時(shí)間觸發(fā)一次如在域使用則意味著分鐘觸發(fā)一次,而,等分別觸發(fā)一次表示列出枚舉值值。
文章鏈接:https://liuyueyi.github.io/hexblog/2018/08/01/180801-Spring之定時(shí)任務(wù)基本使用篇/
Spring之定時(shí)任務(wù)基本使用篇spring-boot項(xiàng)目中,想添加一個(gè)定時(shí)任務(wù),可以怎么辦?
不管什么項(xiàng)目,都是可以直接用JDK原生的定時(shí)任務(wù)來實(shí)現(xiàn)
借助@Scheduled注解來使用
本篇博文則主要集中在在SpringBoot項(xiàng)目中,怎么使用定時(shí)任務(wù)
I. 基本使用 1. demo在SpringBoot項(xiàng)目中,使用定時(shí)任務(wù)需要先開啟對(duì)應(yīng)的配置,一個(gè)簡(jiǎn)單的demo如下
@EnableScheduling @SpringBootApplication public class QuickMediaApplication { public static void main(String[] args) { SpringApplication.run(QuickMediaApplication.class, args); } @Scheduled(cron = "0/1 * * * * ?") public void sc1() throws InterruptedException { System.out.println(Thread.currentThread().getName() + " | sc1 " + System.currentTimeMillis()); } }
上面的代碼足夠簡(jiǎn)單,基本上沒有什么好額外解釋的,只是注意下要使用定時(shí)任務(wù),必須加上 @EnableScheduling注解
2. cron表達(dá)式另外一個(gè)有意思的就是@Scheduled注解中的cron是怎么定義的,上面那個(gè)是啥意思?
Cron定義如下
Seconds Minutes Hours DayofMonth Month DayofWeek Year Seconds Minutes Hours DayofMonth Month DayofWeek
上面每個(gè)坑位,可以取得值不一樣,先分別說明幾個(gè)可能見到的符號(hào)
* : 表示匹配該域的任意值,如分鐘的坑位為*, 表示每分鐘都會(huì)觸發(fā)
? : 只能用在DayofMonth和DayofWeek兩個(gè)域。它也匹配域的任意值,但實(shí)際不會(huì)。因?yàn)镈ayofMonth和 DayofWeek會(huì)相互影響。例如想在每月的20日觸發(fā)調(diào)度,不管20日到底是星期幾,則只能使用如下寫法: 13 13 15 20 ?
-: 表示范圍,例如在Minutes域使用5-20,表示從5分到20分鐘每分鐘觸發(fā)一次。
/: 表示起始時(shí)間開始觸發(fā),然后每隔固定時(shí)間觸發(fā)一次
如在Minutes域使用5/20,則意味著5分鐘觸發(fā)一次,而25,45等分別觸發(fā)一次
,: 表示列出枚舉值值。
如:在Minutes域使用5,20,則意味著在5和20分每分鐘觸發(fā)一次。
L: 表示最后,只能出現(xiàn)在DayofWeek和DayofMonth域,
如在DayofWeek域使用5L,意味著在最后的一個(gè)星期四觸發(fā)。
W: 表示有效工作日(周一到周五),只能出現(xiàn)在DayofMonth域,系統(tǒng)將在離指定日期的最近的有效工作日觸發(fā)事件
如:在 DayofMonth使用5W,如果5日是星期六,則將在最近的工作日:星期五,即4日觸發(fā)。如果5日是星期天,則在6日(周一)觸發(fā);如果5日在星期一 到星期五中的一天,則就在5日觸發(fā)。另外一點(diǎn),W的最近尋找不會(huì)跨過月份。
LW: 這兩個(gè)字符可以連用,表示在某個(gè)月最后一個(gè)工作日,即最后一個(gè)星期五。
#: 用于確定每個(gè)月第幾個(gè)星期幾,只能出現(xiàn)在DayofMonth域。例如在4#2,表示某月的第二個(gè)星期三。
根據(jù)上面的說明,前面的crond表達(dá)式含義就比較清楚了
0/1 * * * * ? 每s種執(zhí)行一次3. 實(shí)例說明
下面給出一些常見的實(shí)例說明
0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn) 0 0/30 9-17 * * ? 朝九晚五工作時(shí)間內(nèi)每半小時(shí) 0 0 12 ? * WED 表示每個(gè)星期三中午12點(diǎn) "0 0 12 * * ?" 每天中午12點(diǎn)觸發(fā) "0 15 10 ? * *" 每天上午10:15觸發(fā) "0 15 10 * * ?" 每天上午10:15觸發(fā) "0 15 10 * * ? *" 每天上午10:15觸發(fā) "0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā) "0 * 14 * * ?" 在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā) "0 0/5 14 * * ?" 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā) "0 0/5 14,18 * * ?" 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā) "0 0-5 14 * * ?" 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā) "0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā) "0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā) "0 15 10 15 * ?" 每月15日上午10:15觸發(fā) "0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā) "0 15 10 ? * 6L" 每月的最后一個(gè)星期五上午10:15觸發(fā) "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個(gè)星期五上午10:15觸發(fā) "0 15 10 ? * 6#3" 每月的第三個(gè)星期五上午10:15觸發(fā)4. 疑問
上面只是介紹了簡(jiǎn)單的使用姿勢(shì),但有幾個(gè)自然而然的疑問有待驗(yàn)證
一個(gè)項(xiàng)目中有多個(gè)定時(shí)任務(wù)時(shí),他們是并行執(zhí)行的還是串行執(zhí)行的?
如果默認(rèn)是串行的
那么有相同的crond表達(dá)式的定時(shí)任務(wù)之間,有先后順序么?
某個(gè)任務(wù)的阻塞是否會(huì)影響后面的任務(wù)?
如果需要他們并行執(zhí)行,可以怎么做?
如果是并發(fā)執(zhí)行的
是新創(chuàng)建線程還是采用線程池來復(fù)用呢?
在并發(fā)執(zhí)行時(shí),假設(shè)有個(gè)每秒執(zhí)行一次的任務(wù),但是它執(zhí)行一次消耗的時(shí)間大于1s時(shí),這個(gè)任務(wù)的表現(xiàn)時(shí)怎樣的呢?不斷地新增線程來執(zhí)行還是等執(zhí)行完畢之后再執(zhí)行下一次的呢?
上面這些問題先跑出來,留待下次結(jié)合實(shí)例給出回答
II. 其他 1. 一灰灰Blog: https://liuyueyi.github.io/he...一灰灰的個(gè)人博客,記錄所有學(xué)習(xí)和工作中的博文,歡迎大家前去逛逛
2. 聲明盡信書則不如,已上內(nèi)容,純屬一家之言,因個(gè)人能力有限,難免有疏漏和錯(cuò)誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評(píng)指正,不吝感激
微博地址: 小灰灰Blog
QQ: 一灰灰/3302797840
3. 掃描關(guān)注一灰灰blog
小灰灰Blog&公眾號(hào)
知識(shí)星球
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/76571.html
摘要:定時(shí)任務(wù)高級(jí)使用篇前面一篇博文之定時(shí)任務(wù)基本使用篇介紹了環(huán)境下,定時(shí)任務(wù)的簡(jiǎn)單使用姿勢(shì),也留了一些問題,這一篇?jiǎng)t希望能針對(duì)這些問題給個(gè)答案定時(shí)任務(wù)進(jìn)階篇問題小結(jié)前面一篇博文,拋出了下面的幾個(gè)問題,接下來則圍繞問題進(jìn)行分析一個(gè)項(xiàng)目中有多個(gè)定時(shí) showImg(https://segmentfault.com/img/remote/1460000015880327); Spring定時(shí)任務(wù)...
摘要:在定時(shí)器接口的方法中我們可以發(fā)現(xiàn)一個(gè)方法接受接口,而也是一個(gè)接口,抽象了觸發(fā)任務(wù)執(zhí)行的觸發(fā)器。更常用的一個(gè)觸發(fā)器是,它使用表達(dá)式指定何時(shí)執(zhí)行任務(wù)。配置定時(shí)任務(wù)首先看看配置。配置提供了命名空間,讓配置定時(shí)任務(wù)非常簡(jiǎn)單。 本文參考自Spring官方文檔 34. Task Execution and Scheduling。 在程序中常常有定時(shí)任務(wù)的需求,例如每隔一周生成一次報(bào)表、每個(gè)月月末清...
摘要:文章鏈接動(dòng)態(tài)腳本支持框架之使用介紹篇?jiǎng)討B(tài)腳本支持框架之使用介紹篇相關(guān)博文動(dòng)態(tài)腳本支持框架整體介紹篇這個(gè)項(xiàng)目主要就是為了解決數(shù)據(jù)訂正和接口驗(yàn)證不方便的場(chǎng)景,設(shè)計(jì)的一個(gè)及其簡(jiǎn)單的動(dòng)態(tài)腳本調(diào)度框架,前面一篇整體介紹篇博文,主要介紹了這是 showImg(https://segmentfault.com/img/remote/1460000015698572); 文章鏈接:https://li...
摘要:從使用到原理學(xué)習(xí)線程池關(guān)于線程池的使用,及原理分析分析角度新穎面向切面編程的基本用法基于注解的實(shí)現(xiàn)在軟件開發(fā)中,分散于應(yīng)用中多出的功能被稱為橫切關(guān)注點(diǎn)如事務(wù)安全緩存等。 Java 程序媛手把手教你設(shè)計(jì)模式中的撩妹神技 -- 上篇 遇一人白首,擇一城終老,是多么美好的人生境界,她和他歷經(jīng)風(fēng)雨慢慢變老,回首走過的點(diǎn)點(diǎn)滴滴,依然清楚的記得當(dāng)初愛情萌芽的模樣…… Java 進(jìn)階面試問題列表 -...
閱讀 2381·2021-11-12 10:34
閱讀 1465·2019-08-29 16:15
閱讀 2678·2019-08-29 15:17
閱讀 1334·2019-08-23 17:09
閱讀 389·2019-08-23 11:37
閱讀 2451·2019-08-23 10:39
閱讀 468·2019-08-22 16:43
閱讀 3107·2019-08-22 14:53