SpringBoot注解@EnableScheduling定時(shí)任務(wù)詳細(xì)解析
一、定時(shí)任務(wù)作用?
定時(shí)任務(wù)相當(dāng)于鬧鐘 在什么時(shí)間做什么事情(執(zhí)行什么命令/腳本)
參數(shù):
@EnableScheduling 開啟對定時(shí)任務(wù)的支持
其中Scheduled注解中有以下幾個(gè)參數(shù):
1.cron是設(shè)置定時(shí)執(zhí)行的表達(dá)式,如 0 0/5 ?每隔五分鐘執(zhí)行一次 秒 分 時(shí) 天 月
2.zone表示執(zhí)行時(shí)間的時(shí)區(qū)
3.fixedDelay 和fixedDelayString 表示一個(gè)固定延遲時(shí)間執(zhí)行,上個(gè)任務(wù)完成后,延遲多長時(shí)間執(zhí)行
4.fixedRate 和fixedRateString表示一個(gè)固定頻率執(zhí)行,上個(gè)任務(wù)開始后,多長時(shí)間后開始執(zhí)行
5.initialDelay 和initialDelayString表示一個(gè)初始延遲時(shí)間,第一次被調(diào)用前延遲的時(shí)間
二、舉例說明
1、pom.xml中導(dǎo)入必要的依賴:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<dependencies>
<!-- SpringBoot 核心組件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、寫一個(gè)springboot的啟動類:
啟動類里面使用@EnableScheduling 注解開啟功能,自動掃描
@SpringBootApplication
@EnableScheduling //開啟定時(shí)任務(wù)
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}
3、新建一個(gè)Job類:
- 要在任務(wù)的類上寫@Component
- 要在任務(wù)方法上寫@Scheduled
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @ClassName Jobs
* @Author jeffrey
* @Description Jobs
**/
@Component
public class Jobs {
//表示方法執(zhí)行完成后5秒
@Scheduled(fixedDelay = 5000)
public void fixedDelayJob() throws InterruptedException {
System.out.println("fixedDelay 每隔5秒" + new Date());
}
//表示每隔3秒
@Scheduled(fixedRate = 3000)
public void fixedRateJob() {
System.out.println("fixedRate 每隔3秒" + new Date());
}
//表示每天8時(shí)30分0秒執(zhí)行
@Scheduled(cron = "0 0,30 0,8 ? * ? ")
public void cronJob() {
System.out.println(new Date() + " ...>>cron....");
}
}執(zhí)行結(jié)果如下:
fixedRate 每隔3秒Thu Jun 20 20:26:41 CST 2019
fixedDelay 每隔5秒Thu Jun 20 20:26:43 CST 2019
fixedRate 每隔3秒Thu Jun 20 20:26:44 CST 2019
fixedDelay 每隔5秒Thu Jun 20 20:26:48 CST 2019
三、總結(jié)
- fixedDelay和fixedRate,單位是毫秒,這里這里就是5秒和3秒,它們的區(qū)別就是:fixedRate就是每多次分鐘一次,不論你業(yè)務(wù)執(zhí)行花費(fèi)了多少時(shí)間。我都是1分鐘執(zhí)行1次,而fixedDelay是當(dāng)任務(wù)執(zhí)行完畢后1分鐘在執(zhí)行。所以根據(jù)實(shí)際業(yè)務(wù)不同,我們會選擇不同的方式。
- cron表達(dá)式:比如你要設(shè)置每天什么時(shí)候執(zhí)行,就可以用它
- cron表達(dá)式,有專門的語法,而且感覺有點(diǎn)繞人,不過簡單來說,大家記住一些常用的用法即可,特殊的語法可以單獨(dú)去查。
- cron一共有7位,但是最后一位是年,可以留空,所以我們可以寫6位:
- 第一位,表示秒,取值0-59
- 第二位,表示分,取值0-59
- 第三位,表示小時(shí),取值0-23
- 第四位,日期天/日,取值1-31
- 第五位,日期月份,取值1-12
- 第六位,星期,取值1-7,星期一,星期二...,注:不是第1周,第二周的意思
- 另外:1表示星期天,2表示星期一。
- 第7為,年份,可以留空,取值1970-2099
cron中,還有一些特殊的符號,含義如下:
- (*)星號:可以理解為每的意思,每秒,每分,每天,每月,每年...
- (?)問號:問號只能出現(xiàn)在日期和星期這兩個(gè)位置。
- (-)減號:表達(dá)一個(gè)范圍,如在小時(shí)字段中使用“10-12”,則表示從10到12點(diǎn),即10,11,12
- (,)逗號:表達(dá)一個(gè)列表值,如在星期字段中使用“1,2,4”,則表示星期一,星期二,星期四
- (/)斜杠:如:x/y,x是開始值,y是步長,比如在第一位(秒) 0/15就是,從0秒開始,每15秒,最后就是0,15,30,45,60 另:*/y,等同于0/y
下面列舉幾個(gè)例子供大家來驗(yàn)證:
- 0 0 3 * * ? 每天3點(diǎn)執(zhí)行
- 0 5 3 * * ? 每天3點(diǎn)5分執(zhí)行
- 0 5 3 ? * * 每天3點(diǎn)5分執(zhí)行,與上面作用相同
- 0 5/10 3 * * ? 每天3點(diǎn)的 5分,15分,25分,35分,45分,55分這幾個(gè)時(shí)間點(diǎn)執(zhí)行
- 0 10 3 ? * 1 每周星期天,3點(diǎn)10分 執(zhí)行,注:1表示星期天
- 0 10 3 ? * 1#3 每個(gè)月的第三個(gè)星期,星期天 執(zhí)行,#號只能出現(xiàn)在星期的位置
到此這篇關(guān)于SpringBoot注解@EnableScheduling定時(shí)任務(wù)詳細(xì)解析的文章就介紹到這了,更多相關(guān)SpringBoot注解@EnableScheduling內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Spring中@EnableScheduling實(shí)現(xiàn)定時(shí)任務(wù)代碼實(shí)例
- Spring中的@EnableScheduling定時(shí)任務(wù)注解
- SpringBoot使用Scheduling實(shí)現(xiàn)定時(shí)任務(wù)的示例代碼
- springboot通過SchedulingConfigurer實(shí)現(xiàn)多定時(shí)任務(wù)注冊及動態(tài)修改執(zhí)行周期(示例詳解)
- Spring定時(shí)任務(wù)關(guān)于@EnableScheduling的用法解析
- springboot項(xiàng)目使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)的案例代碼
- SpringBoot使用SchedulingConfigurer實(shí)現(xiàn)多個(gè)定時(shí)任務(wù)多機(jī)器部署問題(推薦)
- Spring Scheduling本地任務(wù)調(diào)度設(shè)計(jì)與實(shí)現(xiàn)方式
相關(guān)文章
Java編程實(shí)現(xiàn)打地鼠文字游戲?qū)嵗a
這篇文章主要介紹了Java編程實(shí)現(xiàn)打地鼠文字游戲?qū)嵗a,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-11-11
SpringSecurity詳解整合JWT實(shí)現(xiàn)全過程
JWT作為一個(gè)開放的標(biāo)準(zhǔn)(?RFC?7519?),定義了一種簡潔的,自包含的方法用于通信雙方之間以Json對象的形式安全的傳遞信息。接下來通過本文給大家介紹springSecurity+jwt實(shí)現(xiàn)互踢功能,需要的朋友可以參考下2022-07-07
java.Net.UnknownHostException異常處理問題解決
這篇文章主要介紹了java.Net.UnknownHostException異常處理方法,問題原因是在系統(tǒng)的?/etc/Hostname中配置了主機(jī)名,而在/etc/hosts文件中沒有相應(yīng)的配置,本文給大家詳細(xì)講解,需要的朋友可以參考下2023-03-03
3分鐘純 Java 注解搭個(gè)管理系統(tǒng)的示例代碼
這篇文章主要介紹了3分鐘純 Java 注解搭個(gè)管理系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Springboot如何去掉URL后面的jsessionid
這篇文章主要介紹了Springboot如何去掉URL后面的jsessionid,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
Java中BigDecimal的舍入模式解析(RoundingMode)
這篇文章主要介紹了Java中BigDecimal的舍入模式解析(RoundingMode),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
java秒殺系統(tǒng)常見問題庫存超賣解決實(shí)例分析
這篇文章主要為大家介紹了java秒殺系統(tǒng)常見問題庫存超賣解決實(shí)例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11

