SpringBoot定時任務(wù)調(diào)度與爬蟲的配置實現(xiàn)
SpringTask
SpringTask是Spring自主研發(fā)的輕量級定時任務(wù)工具,相比于Quartz更加簡單方便,且不需要引入其他依賴即可使用。
SpringTask的配置
在配置類中添加一個@EnableScheduling注解即可開啟SpringTask的定時任務(wù)
import org.apache.commons.lang3.concurrent.BasicThreadFactory; @Configuration @EnableScheduling @ComponentScan(basePackages = {"com.xxx.xxx"}) public class TaskConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); } @Bean public Executor taskExecutor() { return new ScheduledThreadPoolExecutor(20, new BasicThreadFactory.Builder().namingPattern("Job-Thread-%d").build()); } }
設(shè)置定時任務(wù)
@Component @Slf4j public class TaskJob { /** * @Scheduled 設(shè)置 */ @Scheduled(cron = "0/10 * * * * ?") public void job1() { //具體處理邏輯 log.info("【job1】開始執(zhí)行:{}", DateUtil.formatDateTime(new Date())); } }
Cron的語法格式及說明
Seconds Minutes Hours DayofMonth Month DayofWeek
時間元素 | 可出現(xiàn)的字符 | 有效數(shù)值范圍 |
---|---|---|
Seconds | , - * / | 0-59 |
Minutes | , - * / | 0-59 |
Hours | , - * / | 0-23 |
DayofMonth | , - * / ? L W | 0-31 |
Month | , - * / | 1-12 |
DayofWeek | , - * / ? L # | 1-7或SUN-SAT |
Cron格式中特殊字符說明
字符 | 作用 | 舉例 |
---|---|---|
, | 列出枚舉值 | 在Minutes域使用5,10,表示在5分和10分各觸發(fā)一次 |
- |表示觸發(fā)范圍| 在Minutes域使用5-10,表示從5分到10分鐘每分鐘觸發(fā)一次
- |匹配任意值| 在Minutes域使用*, 表示每分鐘都會觸發(fā)一次
/ |起始時間開始觸發(fā),每隔固定時間觸發(fā)一次| 在Minutes域使用5/10,表示5分時觸發(fā)一次,每10分鐘再觸發(fā)一次
? |在DayofMonth和DayofWeek中,用于匹配任意值| 在DayofMonth域使用?,表示每天都觸發(fā)一次
|在DayofMonth中,確定第幾個星期幾| 1#3表示第三個星期日
L |表示最后| 在DayofWeek中使用5L,表示在最后一個星期四觸發(fā)
W |表示有效工作日(周一到周五)| 在DayofMonth使用5W,如果5日是星期六,則將在最近的工作日4日觸發(fā)一次
使用舉例
"0 0 10,14,16 * * ?" 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn) "0 0/30 9-17 * * ?" 朝九晚五工作時間內(nèi)每半小時 "0 0 12 ? * WED" 表示每個星期三中午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" 每月的最后一個星期五上午10:15觸發(fā) "0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發(fā) "0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發(fā) "30 * * * * ?" 每半分鐘觸發(fā)任務(wù) "30 10 * * * ?" 每小時的10分30秒觸發(fā)任務(wù) "30 10 1 * * ?" 每天1點(diǎn)10分30秒觸發(fā)任務(wù) "30 10 1 20 * ?" 每月20號1點(diǎn)10分30秒觸發(fā)任務(wù) "30 10 1 20 10 ? *" 每年10月20號1點(diǎn)10分30秒觸發(fā)任務(wù) "30 10 1 20 10 ? 2011" 2011年10月20號1點(diǎn)10分30秒觸發(fā)任務(wù) "30 10 1 ? 10 * 2011" 2011年10月每天1點(diǎn)10分30秒觸發(fā)任務(wù) "30 10 1 ? 10 SUN 2011" 2011年10月每周日1點(diǎn)10分30秒觸發(fā)任務(wù) "15,30,45 * * * * ?" 每15秒,30秒,45秒時觸發(fā)任務(wù) "15-45 * * * * ?" 15到45秒內(nèi),每秒都觸發(fā)任務(wù) "15/5 * * * * ?" 每分鐘的每15秒開始觸發(fā),每隔5秒觸發(fā)一次 "15-30/5 * * * * ?" 每分鐘的15秒到30秒之間開始觸發(fā),每隔5秒觸發(fā)一次 "0 0/3 * * * ?" 每小時的第0分0秒開始,每三分鐘觸發(fā)一次 "0 15 10 ? * MON-FRI" 星期一到星期五的10點(diǎn)15分0秒觸發(fā)任務(wù) "0 15 10 L * ?" 每個月最后一天的10點(diǎn)15分0秒觸發(fā)任務(wù) "0 15 10 LW * ?" 每個月最后一個工作日的10點(diǎn)15分0秒觸發(fā)任務(wù) "0 15 10 ? * 5L" 每個月最后一個星期四的10點(diǎn)15分0秒觸發(fā)任務(wù) "0 15 10 ? * 5#3" 每個月第三周的星期四的10點(diǎn)15分0秒觸發(fā)任務(wù) "0 0 0 * * ?" 每天晚上12點(diǎn)觸發(fā)任務(wù)
爬蟲
使用webmagic開發(fā)爬蟲
流程:
- (1)分析目標(biāo)網(wǎng)頁源碼
- (2)繼承PageProcessor接口編寫自己的處理類,process是定制爬蟲邏輯的核心接口,在這里編寫抽取邏輯
- (3)繼承Pipeline接口編寫自己的存儲類
代碼:
https://github.com/FlyuZ/Spring-Learning
到此這篇關(guān)于SpringBoot定時任務(wù)調(diào)度與爬蟲的實現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot定時任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis傳list參數(shù)調(diào)用oracle存儲過程的解決方法
怎么利用MyBatis傳List類型參數(shù)到數(shù)據(jù)庫存儲過程中實現(xiàn)批量插入數(shù)據(jù)?接下來通過本文給大家介紹Mybatis傳list參數(shù)調(diào)用oracle存儲過程,需要的朋友可以參考下2017-03-03SpringBoot搭建go-cqhttp機(jī)器人的方法實現(xiàn)
本文主要介紹了SpringBoot搭建go-cqhttp機(jī)器人的方法實現(xiàn)2021-12-12Guava自動加載緩存LoadingCache使用實戰(zhàn)詳解
這篇文章主要為大家介紹了Guava自動加載緩存LoadingCache使用實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12很多人竟然不知道Java線程池的創(chuàng)建方式有7種
本文主要介紹了很多人竟然不知道Java線程池的創(chuàng)建方式有7種,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07詳解Java中的字節(jié)碼增強(qiáng)技術(shù)
字節(jié)碼增強(qiáng)技術(shù)就是一類對現(xiàn)有字節(jié)碼進(jìn)行修改或者動態(tài)生成全新字節(jié)碼文件的技術(shù)。本文將通過示例詳細(xì)說說Java的字節(jié)碼增強(qiáng)技術(shù),需要的可以參考一下2022-10-10MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量的問題分析
在Java編碼中,我們通常會把這些數(shù)字或者字符串定義在常量類或者接口中,可以直接在mapper中也可以使用這些常量就比較好,這篇文章主要介紹了MyBatis Mapper中 @Select注解調(diào)用靜態(tài)常量,需要的朋友可以參考下2023-06-06Springboot中的@ComponentScan注解使用解析
這篇文章主要介紹了Springboot中的@ComponentScan注解使用解析,@ComponentScan用于類或接口上主要是指定掃描路徑,spring會把指定路徑下帶有指定注解的類注冊到IOC容器中,需要的朋友可以參考下2024-01-01