當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot高级-任务-定时任务
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot高级-任务-定时任务
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
接下來我們有定時任務,比如每天來收集和分析日志,比如每個月來匯總日志,生成報表等等等等,Spring也支持了非常簡便的任務支持,我們只需要兩個注解,第一個開啟定時任務,第二個給我們需要定時的任務方法加上@Schedule注解,然后寫上Cron表達式即可,我們來測試一下
我在這創建一個Service,叫ScheduleService,把它加載在容器中,假設他有一個方法,這個方法我們需要定時執行,我們只需要給hello上加上@Scheduled注解,這個注解里面有非常多的屬性,最重要的Cron/*** A cron-like expression, extending the usual UN*X definition to include* triggers on the second as well as minute, hour, day of month, month* and day of week. e.g. {@code "0 * * * * MON-FRI"} means once per minute on* weekdays (at the top of the minute - the 0th second).* @return an expression that can be parsed to a cron schedule* @see org.springframework.scheduling.support.CronSequenceGenerator*/
String cron() default "";來指定Cron表達式,這個表達式怎么寫呢,這一塊有提示,我們這個表達式包括有秒,和分,時,還有每一月的某一天,有月份,還有每周的哪一天,就有這么幾個值,把它復制過來,秒,分,時,日,月,還有咱們的周,所以我們來寫表達式的話呢,按照這個表達式來寫,還有一個示例我們拿過來,這個例子,表達式總共6位,每位用空格分割,分割的分別代表哪一秒,還有分,哪一分鐘,時,幾點,還有日,是我們每個月的多少號,還有我們的這個月,和周,代表是周幾,那么我們就來寫上一個表達式,這個表達式代表的意思是,0 * * * * MON-FRI,周一到周五,MON-FRI,*代表任意時刻,不管是哪一月,哪一日,哪一個小時,哪一個分鐘,但是整秒啟動,意思周一到周五,每一分鐘都啟動一次,他這個是整秒啟動,如果0再改為*,我們一定要開啟自動任務功能,@EnableScheduling,開啟基于注解的定時任務,把它加上以后我們來重啟一下這個應用,看一下控制臺是否會有打印
package com.learn.service;import java.util.Date;import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;@Service
public class ScheduleService {/*** second(秒), minute(分),hour(時),day of month(日),month(月), day of week(周幾)* 0 * * * * MON-FRI*/@Scheduled(cron="* * * * * *")//@Scheduled(cron="0,1,2,3,4 * * * * MON-SAT")//@Scheduled(cron="0-4 * * * * MON-SAT")// 每4秒執行一次
// @Scheduled(cron="0/4 * * * * MON-SAT")public void hello() {System.out.println("hello...."+new Date());
// System.out.println(new Date());}
}
package com.learn;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;// 開啟異步注解功能
@EnableAsync
@EnableScheduling
@SpringBootApplication
public class SpringBootTaskApplication {public static void main(String[] args) {// Spring應用啟動起來SpringApplication.run(SpringBootTaskApplication.class,args);}}
除了寫精確值,還取這些特殊字符,這個*號我們剛才見過了,關鍵就是這些特殊字符,逗號代表枚舉,所謂的枚舉,就是要列出我們的時間點,我在這把表達式換一下,我把這些都嘗試一下,這個秒我來列舉上"0,1,2,3,4",5秒的時間,這5秒都會來啟動,剩下我都不變,周一到周六,不管是哪一天,哪一個小時,哪一分鐘,0,1,2,3,4這幾秒都會運行一次,我們來觀察一下,這是我們第一個叫枚舉,還有我們第二種辦法,斜杠就是步長,步長就是每隔多長時間執行一次,0/4代表從0秒啟動,每4秒執行一次,我們來嘗試一下,我們來啟動,?是來進行沖突匹配的,星期這一塊的寫法,你可以寫英文,SUN-SAT,代表周日到周六,或者你來寫數字,而數字你可以寫0-7,1-6代表周一到周六,0和7都能代表周日,這個和以前的調度框架Quartz有點不一樣,這個Quartz是1到7,1代表周日,2代表周一,而我們這個是0跟7都是周日,1-6是周一到周六,大家注意一下,還有我們能寫的表達式,比如字母L代表最后,W代表工作日,C是和我們JAVA的Calendar類來進行計算,而#號代表第幾個,比如4#2的意思,就是第二個,第二個星期四,我就不一個一個嘗試了,我在這里給大家寫了一些表達式,大家能讀懂就行了
?
總結
以上是生活随笔為你收集整理的SpringBoot高级-任务-定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot高级-任务-异步任务
- 下一篇: SpringBoot高级-任务-邮件任务