SpringBoot定時任務調度與爬蟲的配置實現

SpringTask

SpringTask是Spring自主研發的輕量級定時任務工具,相比於Quartz更加簡單方便,且不需要引入其他依賴即可使用。

SpringTask的配置

在配置類中添加一個@EnableScheduling註解即可開啟SpringTask的定時任務

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());
    }
}

設置定時任務

@Component
@Slf4j
public class TaskJob {
    /**
     * @Scheduled 設置
     */
    @Scheduled(cron = "0/10 * * * * ?")
    public void job1() {
        //具體處理邏輯
        log.info("【job1】開始執行:{}", DateUtil.formatDateTime(new Date()));
    }
}

Cron的語法格式及說明

Seconds Minutes Hours DayofMonth Month DayofWeek

時間元素 可出現的字符 有效數值范圍
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分各觸發一次
  • |表示觸發范圍| 在Minutes域使用5-10,表示從5分到10分鐘每分鐘觸發一次
  • |匹配任意值| 在Minutes域使用*, 表示每分鐘都會觸發一次
    / |起始時間開始觸發,每隔固定時間觸發一次| 在Minutes域使用5/10,表示5分時觸發一次,每10分鐘再觸發一次
    ? |在DayofMonth和DayofWeek中,用於匹配任意值| 在DayofMonth域使用?,表示每天都觸發一次

|在DayofMonth中,確定第幾個星期幾| 1#3表示第三個星期日

L |表示最後| 在DayofWeek中使用5L,表示在最後一個星期四觸發
W |表示有效工作日(周一到周五)| 在DayofMonth使用5W,如果5日是星期六,則將在最近的工作日4日觸發一次

使用舉例

"0 0 10,14,16 * * ?" 每天上午10點,下午2點,4點 
"0 0/30 9-17 * * ?" 朝九晚五工作時間內每半小時 
"0 0 12 ? * WED" 表示每個星期三中午12點 
"0 0 12 * * ?" 每天中午12點觸發 
"0 15 10 ? * *" 每天上午10:15觸發 
"0 15 10 * * ?" 每天上午10:15觸發 
"0 15 10 * * ? *" 每天上午10:15觸發 
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發 
"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發 
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發 
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發 
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發 
"0 15 10 15 * ?" 每月15日上午10:15觸發 
"0 15 10 L * ?" 每月最後一日的上午10:15觸發 
"0 15 10 ? * 6L" 每月的最後一個星期五上午10:15觸發 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最後一個星期五上午10:15觸發 
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發
"30 * * * * ?" 每半分鐘觸發任務
"30 10 * * * ?" 每小時的10分30秒觸發任務
"30 10 1 * * ?" 每天1點10分30秒觸發任務
"30 10 1 20 * ?" 每月20號1點10分30秒觸發任務
"30 10 1 20 10 ? *" 每年10月20號1點10分30秒觸發任務
"30 10 1 20 10 ? 2011" 2011年10月20號1點10分30秒觸發任務
"30 10 1 ? 10 * 2011" 2011年10月每天1點10分30秒觸發任務
"30 10 1 ? 10 SUN 2011" 2011年10月每周日1點10分30秒觸發任務
"15,30,45 * * * * ?" 每15秒,30秒,45秒時觸發任務
"15-45 * * * * ?" 15到45秒內,每秒都觸發任務
"15/5 * * * * ?" 每分鐘的每15秒開始觸發,每隔5秒觸發一次
"15-30/5 * * * * ?" 每分鐘的15秒到30秒之間開始觸發,每隔5秒觸發一次
"0 0/3 * * * ?" 每小時的第0分0秒開始,每三分鐘觸發一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10點15分0秒觸發任務
"0 15 10 L * ?" 每個月最後一天的10點15分0秒觸發任務
"0 15 10 LW * ?" 每個月最後一個工作日的10點15分0秒觸發任務
"0 15 10 ? * 5L" 每個月最後一個星期四的10點15分0秒觸發任務
"0 15 10 ? * 5#3" 每個月第三周的星期四的10點15分0秒觸發任務
"0 0 0 * * ?" 每天晚上12點觸發任務

爬蟲

使用webmagic開發爬蟲

流程:

  • (1)分析目標網頁源碼
  • (2)繼承PageProcessor接口編寫自己的處理類,process是定制爬蟲邏輯的核心接口,在這裡編寫抽取邏輯
  • (3)繼承Pipeline接口編寫自己的存儲類

代碼:

https://github.com/FlyuZ/Spring-Learning

到此這篇關於SpringBoot定時任務調度與爬蟲的實現的文章就介紹到這瞭,更多相關SpringBoot定時任務內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: