剛剛看了下spring boot實現定時任務的文章,感覺還不錯。spring boot 使用spring自帶的schedule來實現定時任務變得非常簡單和方便。在這裡個大家分享下。
@enablescheduling //開啟定時任務
public static void main(string args)
}
@component
public class scheduledtasks
}
啟動專案,檢視控制台列印資訊,發現定時任務已經生效。spring boot 和scheduled整合完畢。
但是後來發現個問題,通過同時測試幾個任務發現,所有的任務都是在同乙個執行緒池中的同乙個執行緒來完成的。在實際開發過程中,我們當然不希望所有的任務都執行在乙個執行緒中。
@scheduled(cron="0/1 * * * * ? ") //每1秒執行一次
public void testcron1()
@scheduled(cron="0/2 * * * * ? ") //每2秒執行一次
public void testcron2()
@scheduled(cron="0/3 * * * * ? ") //每3秒執行一次
public void testcron3()
@scheduled(cron="0/4 * * * * ? ") //每4秒執行一次
那麼,怎麼設計成多執行緒實現併發呢?在網上看到過這樣的解決方案。通過scheduleconfig配置檔案實現schedulingconfigurer介面,並重寫setschedule***ng方法,我們嘗試著配置了一下。
@configuration
public class scheduleconfig implements schedulingconfigurer
}
這樣就完成了多執行緒併發的配置?我們啟動專案通過控制台輸出資訊驗證一下結果,最後發現所有的任務都在同乙個執行緒池但不同執行緒中完成,說明這個方案完全可行,這樣,我們就完成了spring boot 多執行緒併發定時任務。
@scheduled所支援的引數:
1.cron:cron表示式,指定任務在特定時間執行;
2.fixeddelay:表示上一次任務執行完成後多久再次執行,引數型別為long,單位ms;
3.fixeddelaystring:與fixeddelay含義一樣,只是引數型別變為string;
4.fixedrate:表示按一定的頻率執行任務,引數型別為long,單位ms;
5.fixedratestring: 與fixedrate的含義一樣,只是將引數型別變為string;
6.initialdelay:表示延遲多久再第一次執行任務,引數型別為long,單位ms;
7.initialdelaystring:與initialdelay的含義一樣,只是將引數型別變為string;
8.zone:時區,預設為當前時區,一般沒有用到。
cron表示式範例:
每隔5秒執行一次:*/5 * * * * ?
每隔1分鐘執行一次:0 */1 * * * ?
每天23點執行一次:0 0 23 * * ?
每天凌晨1點執行一次:0 0 1 * * ?
每月1號凌晨1點執行一次:0 0 1 1 * ?
每月最後一天23點執行一次:0 0 23 l * ?
每週星期天凌晨1點實行一次:0 0 1 ? * l
在26分、29分、33分執行一次:0 26,29,33 * * * ?
每天的0點、13點、18點、21點都執行一次:0 0 0,13,18,21 * * ?
參考文章
springboot定時任務及cron表示式詳解
多執行緒併發
多執行緒併發主要有3個方面 1 同步器 主要有synchronized,reentrantlock 訊號量,門栓 countdownlatch 障柵 cyclicbarrier 交換器。2 同步容器 主要包括 對映 集 佇列 對映 concurrenthashmap,concurrentskipli...
多執行緒併發
更簡單的執行緒池 多執行緒和多程序都可以很容易的實現併發,協程通過切換上下文來充分利用cpu實現併發效果 threading模組 thread類的基本狀態和行為 屬性名和值 name none,group none,target none,args kwargs daemon none 方法 sta...
spring boot 整合多執行緒
配置pom檔案 org.mybatis.spring.bootgroupid mybatis spring boot starterartifactid 1.3.0version dependency org.springframework.bootgroupid spring boot confi...