Spring中自帶的@Schedule實現(xiàn)自動任務的過程解析
SpringBoot中自帶了一個能夠實現(xiàn)定時任務的注解@Schedule
如果定時任務比較簡單,則可以使用SpringBoot中自帶的@Schedule,但是如果任務調度很復雜的話,就建議使用Quartz組件了。
說一下這個@Schedule注解怎么用?
基本使用
1.第一步:在一個方法上使用@Schedule,標注這個方法是一個自定義任務
通過該注解的cron屬性,指定任務的運行規(guī)則
@Slf4j @Component public class MyTimeJob { @Scheduled(cron = "0/1 * * * * *") public void distanceOffDuty() { log.info("現(xiàn)在是{},{}",new Date(),"~~~馬上就要下班了"); } }
關于Cron表達式,可以自己學習,
寫cron表達式是一件麻煩的事情,就像寫正則表達式似的
建議使用工具來生成cron表達式
在線Cron表達式生成器
2.在配置類上通過@EnableScheduling
開啟定時任務配置,開啟了此配置后,SpringBoot會自動掃描容器中帶有@Schedule注解
注意:將包含@Schedule標注的方法所在的類,設置為Component或Configuration,要讓SpringBoot知道這個類
@SpringBootApplication @EnableScheduling public class TestQuartzApplication { public static void main(String[] args) { SpringApplication.run(TestQuartzApplication.class, args); } }
接下來啟動程序,就可以看到自定義任務執(zhí)行了
多線程執(zhí)行
默認情況下,我們所有自定義的任務是單線程的,多個任務之間排隊執(zhí)行。
例如,我們定義了兩個任務:
@Slf4j @Component public class MyTimeJob { @Scheduled(cron = "0/1 * * * * *") public void distanceOffDuty() { log.info("現(xiàn)在是{},{}",new Date(),"~~~馬上就要下班了"); } @Scheduled(cron = "0/10 * * * * *") public void work(){ log.info("又工作(摸魚)了10秒鐘了"); } }
看控制臺這兩個任務的執(zhí)行情況:
如果想要為每一個任務單獨開一個線程,異步化操作,效率能提高,不會被阻塞。
此時需要自定義線程池,看操作!
自定義配置類
@Configuration @EnableScheduling public class ScheduledConfig implements SchedulingConfigurer { /** * 任務執(zhí)行線程池大小 */ private static final int TASK_POOL_SIZE = 50; /** * 自定義線程前綴 */ private static final String TASK_THREAD_PREFIX = "scheduling-task-"; @Override public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { // 創(chuàng)建任務線程池 ThreadPoolTaskScheduler taskPool = new ThreadPoolTaskScheduler(); // 設置線程池大小 taskPool.setPoolSize(TASK_POOL_SIZE); // 線程前綴名 taskPool.setThreadNamePrefix(TASK_THREAD_PREFIX); // 初始化 taskPool.initialize(); scheduledTaskRegistrar.setTaskScheduler(taskPool); } }
看自定義任務的執(zhí)行情況:
每次執(zhí)行任務,都會在線程池中取一個線程來使用
到此這篇關于關于Spring中自帶的@Schedule實現(xiàn)自動任務的文章就介紹到這了,更多相關Spring @Schedule自動任務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring-Validation 后端數(shù)據(jù)校驗的實現(xiàn)
這篇文章主要介紹了Spring-Validation 后端數(shù)據(jù)校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07java 中Comparable與Comparator詳解與比較
這篇文章主要介紹了java 中Comparable與Comparator詳解與比較的相關資料,需要的朋友可以參考下2017-04-04java使用MulticastSocket實現(xiàn)組播
這篇文章主要為大家詳細介紹了java使用MulticastSocket實現(xiàn)組播,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01SpringBoot與Spring中數(shù)據(jù)緩存Cache超詳細講解
我們知道內存讀取速度遠大于硬盤讀取速度,當需要重復獲取相同數(shù)據(jù)時,一次一次的請求數(shù)據(jù)庫或者遠程服務,導致在數(shù)據(jù)庫查詢或者遠程方法調用上小號大量的時間,最終導致程序性能降低,這就是數(shù)據(jù)緩存要解決的問題,學過計算機組成原理或者操作系統(tǒng)的同學們應該比較熟悉2022-10-10