1. 程式人生 > >Spring Boot入門系列(八)整合定時任務Task,一秒搞定定時任務

Spring Boot入門系列(八)整合定時任務Task,一秒搞定定時任務

前面介紹了Spring Boot 中的整合Redis快取已經如何實現資料快取功能。不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。

今天主要講解Springboot整合定時任務。在SpringMvc中也會用到很多的定時任務,主要是通過Quartz實現。但是在Spring MVC中使用這些外掛相對還是比較麻煩的:要增加一些依賴包,然後加入各種配置等等。Spring Boot相對就簡單很多了,現在就來說說Spring Boot 是怎麼實現定時任務的。

 

一、使用註解@EnableScheduling

在application啟動類忠,加上@EnableScheduling 註解,Spring Boot 會會自動掃描任務類,開啟定時任務。

package com.weiz;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import tk.mybatis.spring.annotation.MapperScan;


@SpringBootApplication
//掃描 mybatis mapper 包路徑
@MapperScan(basePackages = "com.weiz.mapper")
//掃描 所有需要的包, 包含一些自用的工具類包 所在的路徑
@ComponentScan(basePackages = {"com.weiz","org.n3r.idworker"})
//開啟定時任務
@EnableScheduling
//開啟非同步呼叫方法
@EnableAsync
public class SpringBootStarterApplication {
public static void main(String[] args) { SpringApplication.run(SpringBootStarterApplication.class, args); } }

說明:

1、@EnableScheduling 為開啟定時任務。

2、@ComponentScan 定義掃描包的路徑。

 

二、建立任務類,定義@Component 元件

建立com.weiz.tasks包,在tasks包裡增加TestTask任務類,加上@Component 註解,那麼TestTask就會作為元件被容器掃描到。掃描到之後,Spring Boot容器就會根據任務類裡面定義的時間,定時執行了。

package com.weiz.tasks;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class TestTask {

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    // 定義每過3秒執行任務
    @Scheduled(fixedRate = 3000)
    // @Scheduled(cron = "4-40 * * * * ?")
    public void reportCurrentTime() {
        System.out.println("現在時間:" + dateFormat.format(new Date()));
    }
}
說明:@Scheduled 是定時任務執行的時間,可以每個一段時間執行,也可以使用cron 表示式定義執行時間。


三、Cron表示式

Spring Boot 定時任務支援每個一段時間執行或是使用cron 表示式定義執行時間。關於cron表示式,我之前的文章介紹過,大家可以看我以前的文章:《Quartz.NET總結(二)CronTrigger和Cron表示式》

 

四、測試

啟動程式之後,就可以看到系統每隔3s,會列印系統時間。

 

最後

以上,就把Spring Boot整合定時任務簡單介紹完了,是不是特別簡單,下一篇我會介紹Spring boot 的非同步任務。

這個系列課程的完整原始碼,也會提供給大家。大家關注我的微信公眾號(架構師精進),回覆:springboot原始碼。獲取這個系列課程的完整原始碼。