今天小編就為大家?guī)?lái)一篇SpringBoot-定時(shí)任務(wù)分析的文章。小編覺(jué)得挺不錯(cuò)的,為此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。
遂溪網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
在我們實(shí)際開(kāi)發(fā)項(xiàng)目的過(guò)程中,經(jīng)常需要定時(shí)任務(wù)來(lái)幫我們做一些事情,例如每隔一小時(shí)統(tǒng)計(jì)新注冊(cè)的用戶(hù)數(shù)量、每天凌晨一點(diǎn)進(jìn)行服務(wù)器緩存清理、每周五統(tǒng)計(jì)購(gòu)買(mǎi)會(huì)員的用戶(hù)數(shù)量等。SpringBoot在2.0版本之后,提供了非常方便的注解方式來(lái)編寫(xiě)定時(shí)任務(wù)程序,無(wú)需添加任何配置文件和依賴(lài)關(guān)系,快速構(gòu)建一個(gè)SpringBoot項(xiàng)目,添加注解如下:
@SpringBootApplication @EnableScheduling public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
@EnableScheduling:開(kāi)啟對(duì)定時(shí)任務(wù)的支持
注解方式-單線(xiàn)程
創(chuàng)建SchedulerTask1類(lèi)存放與task包下:
@Component public class SchedulerTask1 { @Scheduled(cron = "*/6 * * * * ?") private void process(){ System.out.println("SchedulerTask1 : " + LocalDateTime.now().toLocalTime() + "\r\n線(xiàn)程 : " + Thread.currentThread().getName()); } }
創(chuàng)建SchedulerTask2類(lèi)存放與task包下:
@Component public class SchedulerTask2 { @Scheduled(fixedRate = 3000) private void process(){ System.out.println("SchedulerTask2 : " + LocalDateTime.now().toLocalTime() + "\r\n線(xiàn)程 : " + Thread.currentThread().getName()); } }
@Scheduled 參數(shù)可以接受兩種定時(shí)的設(shè)置,一種是我們常用的cron="*/6 * * * * ?",一種是 fixedRate = 3000,兩種都表示每隔X秒打印一下內(nèi)容。
fixedRate 說(shuō)明
@Scheduled(fixedRate = 3000) :上一次開(kāi)始執(zhí)行時(shí)間點(diǎn)之后3秒再執(zhí)行
@Scheduled(fixedDelay = 3000) :上一次執(zhí)行完畢時(shí)間點(diǎn)之后3秒再執(zhí)行
@Scheduled(initialDelay=1000, fixedRate=6000) :第一次延遲1秒后執(zhí)行,之后按
fixedRate 的規(guī)則每6秒執(zhí)行一次
Cron表達(dá)式參數(shù)分別表示:
秒(0~59) 例如0/5表示每5秒
分(0~59)
時(shí)(0~23)
日(0~31)的某天,需計(jì)算
月(0~11)
周幾( 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT)
啟動(dòng)項(xiàng)目,執(zhí)行結(jié)果如下:
SchedulerTask2 : 21:36:47.795008800 線(xiàn)程 : scheduling-1 SchedulerTask1 : 21:36:48.014888600 線(xiàn)程 : scheduling-1 SchedulerTask2 : 21:36:50.792887400 線(xiàn)程 : scheduling-1 SchedulerTask2 : 21:36:53.792697900 線(xiàn)程 : scheduling-1 SchedulerTask1 : 21:36:54.002684700 線(xiàn)程 : scheduling-1 SchedulerTask2 : 21:36:56.792517700 線(xiàn)程 : scheduling-1 SchedulerTask2 : 21:36:59.792606400 線(xiàn)程 : scheduling-1 SchedulerTask1 : 21:37:00.002598400 線(xiàn)程 : scheduling-1 SchedulerTask2 : 21:37:02.792423300 線(xiàn)程 : scheduling-1 SchedulerTask2 : 21:37:05.802238 線(xiàn)程 : scheduling-1 SchedulerTask1 : 21:37:06.002225200 線(xiàn)程 : scheduling-1
可以看到,當(dāng)上面兩個(gè)定時(shí)任務(wù)同時(shí)執(zhí)行時(shí),用的是同一個(gè)線(xiàn)程:scheduling-1,任務(wù)的執(zhí)行時(shí)機(jī)會(huì)受上一個(gè)任務(wù)執(zhí)行時(shí)間的影響。
注解方式-多線(xiàn)程
新建MultithreadScheduleTask類(lèi)存放與task包下:
@Component @EnableAsync public class MultithreadScheduleTask { @Async @Scheduled(fixedDelay = 1000) public void first() throws InterruptedException { System.out.println("第一個(gè)定時(shí)任務(wù)開(kāi)始 : " + LocalDateTime.now().toLocalTime() + "\r\n線(xiàn)程 : " + Thread.currentThread().getName()); Thread.sleep(1000 * 10); } @Async @Scheduled(fixedDelay = 2000) public void second() { System.out.println("第二個(gè)定時(shí)任務(wù)開(kāi)始 : " + LocalDateTime.now().toLocalTime() + "\r\n線(xiàn)程 : " + Thread.currentThread().getName()); System.out.println(); } }
@EnableAsync:開(kāi)啟多線(xiàn)程
啟動(dòng)項(xiàng)目,運(yùn)行結(jié)果如下:
第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:47.121991300 線(xiàn)程 : task-1 第二個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:47.121991300 線(xiàn)程 : task-2 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:48.121930600 線(xiàn)程 : task-3 第二個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:49.114640 線(xiàn)程 : task-4 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:49.114640 線(xiàn)程 : task-5 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:50.119792400 線(xiàn)程 : task-6 第二個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:51.119726900 線(xiàn)程 : task-7 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:51.129727800 線(xiàn)程 : task-8 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:52.130157200 線(xiàn)程 : task-2 第二個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:53.120096500 線(xiàn)程 : task-4 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:53.140095 線(xiàn)程 : task-7 第一個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:54.140429600 線(xiàn)程 : task-4 第二個(gè)定時(shí)任務(wù)開(kāi)始 : 21:48:57.130710 線(xiàn)程 : task-1
以上就是SpringBoot-定時(shí)任務(wù)分析的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊!
當(dāng)前文章:SpringBoot-定時(shí)任務(wù)分析
文章位置:http://jinyejixie.com/article26/ppisjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、自適應(yīng)網(wǎng)站、、域名注冊(cè)、關(guān)鍵詞優(yōu)化、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)