最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot定時任務(wù)@Scheduled使用方式

 更新時間:2026年04月03日 08:51:05   作者:撞撞~  
本文主要介紹了SpringBoot中的定時任務(wù)的實(shí)現(xiàn)方法,通過@EnableScheduling開啟定時任務(wù),使用@Scheduled注解可以設(shè)置定時任務(wù)的觸發(fā)方式,文中詳細(xì)介紹了corn參數(shù)的使用方法和各種通配符的含義,并給出了示例代碼

在平時開發(fā)中,需求中經(jīng)常會出現(xiàn)一些定時周期任務(wù),我們可以是用java定時線程ScheduledExecutorService或定時器Timer去實(shí)現(xiàn),而在SpringBoot中,定時任務(wù)十分簡單,只需要新建一個定時任務(wù)類,使用@EnableScheduling開啟定時任務(wù),并在對應(yīng)方法上添加注解@Scheduled即可,其實(shí)它的底層也是通過定時線springframework.scheduling.concurrent.ThreadPoolTaskScheduler去實(shí)現(xiàn)的

一、@Scheduled注解參數(shù)

1、corn

該參數(shù)接收一個cron表達(dá)式,cron表達(dá)式是一個字符串,字符串以5或6個空格隔開,分開共6或7個域,每一個域代表一個含義。用來表示任務(wù)執(zhí)行的時機(jī)及周期

注:[年]不是必須的域,可以省略[年],則一共6個域

語法

[秒] [分] [小時] [日] [月] [周] [年]
序號說明是否必填允許填寫的值允許的通配符
10-59, - * /
20-59, - * /
30-23, - * /
41-31, - * ? / L W
51-12 或 JAN-DEC, - * /
61-7 或 SUN-SAT, - * ? / L #
71970-2099, - * /

通配符

通配符描述示例
*表示所有值例如:在分的字段上設(shè)置 *,表示每一分鐘都會觸發(fā)。
?表示不指定值使用的場景為不需要關(guān)心當(dāng)前設(shè)置這個字段的值。例如:要在每月的10號觸發(fā)一個操作,但不關(guān)心是周幾,所以需要周位置的那個字段設(shè)置為”?”, 具體設(shè)置為 0 0 0 10 * ?
-表示區(qū)間例如:在小時上設(shè)置 “10-12”,表示 10,11,12點(diǎn)都會觸發(fā)。
,表示指定多個值例如:在周字段上設(shè)置 “MON,WED,FRI” 表示周一,周三和周五觸發(fā)。
/用于遞增觸發(fā)如在秒上面設(shè)置”5/15” 表示從5秒開始,每增15秒觸發(fā)(5,20,35,50)。 在日字段上設(shè)置’1/3’所示每月1號開始,每隔三天觸發(fā)一次
L表示最后的意思在日字段設(shè)置上,表示當(dāng)月的最后一天(依據(jù)當(dāng)前月份,如果是二月還會依據(jù)是否是潤年[leap]), 在周字段上表示星期六,相當(dāng)于”7”或”SAT”。如果在”L”前加上數(shù)字,則表示該數(shù)據(jù)的最后一個。例如在周字段上設(shè)置”6L”這樣的格式,則表示“本月最后一個星期五”
W表示離指定日期的最近那個工作日(周一至周五)例如在日字段上置”15W”,表示離每月15號最近的那個工作日觸發(fā)。如果15號正好是周六,則找最近的周五(14號)觸發(fā), 如果15號是周未,則找最近的下周一(16號)觸發(fā).如果15號正好在工作日(周一至周五),則就在該天觸發(fā)。如果指定格式為 “1W”,它則表示每月1號往后最近的工作日觸發(fā)。如果1號正是周六,則將在3號下周一觸發(fā)。(注,”W”前只能設(shè)置具體的數(shù)字,不允許區(qū)間”-“)。
#序號(表示每月的第幾個周幾),例如在周字段上設(shè)置”6#3”表示在每月的第三個周六.注意如果指定”#5”,正好第五周沒有周六,則不會觸發(fā)該配置(用在母親節(jié)和父親節(jié)再合適不過了) ;小提示:’L’和 ‘W’可以一組合使用。如果在日字段上設(shè)置”LW”,則表示在本月的最后一個工作日觸發(fā);周字段的設(shè)置,若使用英文字母是不區(qū)分大小寫的,即MON與mon相同

示例

描述corn表達(dá)式
每隔10秒執(zhí)行一次*/10 * * * * ?
每小時30,45分鐘各執(zhí)行一次0 30,45 * * * ?
每周周一的凌晨2點(diǎn)半執(zhí)行一次0 30 2 ? * MON
每天的下午1點(diǎn)開始,每隔5min執(zhí)行一次0 0/5 13 * * ?

2、zone

時區(qū),cron表達(dá)式會基于該時區(qū)解析。

缺省取服務(wù)器所在地的時區(qū)。比如我們一般使用的時區(qū)Asia/Shanghai

3、fixedDelay

上一次執(zhí)行完畢之后多長時間再執(zhí)行

@Scheduled(fixedRate = 5000)  // 上次執(zhí)行后再過5s執(zhí)行

4、fixedDelayString

與 fixedDelay 意思相同,只是使用字符串的形式,唯一不同的是支持占位符

@Scheduled(fixedDelayString = "5000")

5、fixedRate

周期,多久執(zhí)行一次

@Scheduled(fixedRate = 5000) // 每5s執(zhí)行一次

6、fixedRateString

與 fixedRate意思相同,只是使用字符串的形式,支持占位符

7、initialDelay

第一次執(zhí)行延遲時間

@Scheduled(initialDelay=1000, fixedRate=5000) //第一次延遲1秒后執(zhí)行,之后按fixedRate的規(guī)則每5秒執(zhí)行一次

8. initialDelayString

與initialDelay 意思相同,只是使用字符串的形式,支持占位符。

二、示例

注意在類上加上@Configuration或@Component注解

1、示例1

@Slf4j
@EnableScheduling // 開啟定時任務(wù)
@Configuration // 此注解必須加,不加不會掃描到定時任務(wù),也可使用@Component
public class ScheduleTask {

	@Scheduled(initialDelay = 3000, fixedRateString = "5000") // 首次延遲3秒后執(zhí)行,后邊每5s一次
	private void scheduleTask1() {
		log.info("method = scheduleTask1, schedule time is {}", System.currentTimeMillis());
	}

	@Scheduled(fixedDelay = 5000) // 如果是服務(wù)啟動就開始執(zhí)行的任務(wù),和fixedRate就意義相同了
	private void scheduleTask2() {
		log.info("method = scheduleTask2, schedule time is {}", System.currentTimeMillis());
	}

	@Scheduled(cron = "*/10 * * * * ?") // 每隔十秒執(zhí)行一次
	private void scheduleTask3() {
		log.info("method = scheduleTask3, schedule time is {}", System.currentTimeMillis());
	}

	@Scheduled(cron = "0 50,55 * *  * ?") // 每小時的50和55各執(zhí)行一次
	private void scheduleTask4() {
		log.info("method = scheduleTask4, schedule time is {}", System.currentTimeMillis());
	}
}

結(jié)果

從日志可以看出服務(wù)啟動后scheduleTask2先執(zhí)行的,3s后scheduleTask1開始執(zhí)行,后續(xù)都是每5s執(zhí)行一次,scheduleTask3是每10s執(zhí)行一次

12:48:24.316 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask2, schedule time is 1594356504316
12:48:27.318 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask1, schedule time is 1594356507318
12:48:29.319 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask2, schedule time is 1594356509319
12:48:30.001 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask3, schedule time is 1594356510001
12:48:32.317 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask1, schedule time is 1594356512317
12:48:34.320 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask2, schedule time is 1594356514320
12:48:37.317 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask1, schedule time is 1594356517317
12:48:39.323 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask2, schedule time is 1594356519323
12:48:40.001 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask3, schedule time is 1594356520001

scheduleTask4 50和55分各執(zhí)行了一次

12:50:00.001 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask4, schedule time is 1594356600001
12:55:00.002 [scheduling-1] INFO  com.spring.demo.service.impl.ScheduleTask - method = scheduleTask4, schedule time is 1594356900002

2、示例2

從某個時刻開始任務(wù),每間隔多長時間來觸發(fā)一次

@Slf4j
@EnableScheduling
@Configuration
public class ScheduleTask {
	private int count = 0;
	@Scheduled(cron = "0 0/1 13 * * ?") // 每天下午1點(diǎn)開始,每1min執(zhí)行一次
	private void scheduleTask() {
		log.info("execute 第{}次 scheduleTask", ++count);
	}

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合MybatisPlus的教程詳解

    SpringBoot整合MybatisPlus的教程詳解

    這篇文章主要介紹了SpringBoot整合MybatisPlus的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • springBoot靜態(tài)資源加載不到,并且配置了也不生效問題及解決

    springBoot靜態(tài)資源加載不到,并且配置了也不生效問題及解決

    這篇文章總結(jié)了一個在Spring Boot 2.6.x版本中,由于路徑匹配策略改變導(dǎo)致靜態(tài)資源無法加載的問題,并提供了解決方案:通過配置類或在配置文件中設(shè)置路徑匹配策略為AntPathMatcher,或者直接降級Spring Boot版本
    2025-02-02
  • 在SpringBoot中配置日期格式化的方法詳解

    在SpringBoot中配置日期格式化的方法詳解

    通常情況下,發(fā)起一個 Http 請求,Spring Boot 會根據(jù)請求路徑映射到指定 Controller 上的某個方法的參數(shù)上,接著,Spring 會自動進(jìn)行類型轉(zhuǎn)換,對于日期類型的參數(shù),Spring 默認(rèn)是沒有配置如何將字符串轉(zhuǎn)換成日期類型的,本文將給大家介紹在SpringBoot中配置日期格式化的方法
    2023-10-10
  • Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解

    Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解

    這篇文章主要介紹了Java強(qiáng)制保留兩位小數(shù)的四種方法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Spring Boot XSS 攻擊過濾插件使用

    Spring Boot XSS 攻擊過濾插件使用

    這篇文章主要介紹了Spring Boot XSS 攻擊過濾插件使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java實(shí)現(xiàn)常用的三種加密算法詳解

    Java實(shí)現(xiàn)常用的三種加密算法詳解

    編程中常見的加密算法有以下幾種:信息摘要算法、對稱加密算法以及非對稱加密算法。本文將利用Java實(shí)現(xiàn)這幾種常見的加密算法,需要的可以參考一下
    2022-03-03
  • 深入淺出探究Java多態(tài)的實(shí)現(xiàn)和應(yīng)用

    深入淺出探究Java多態(tài)的實(shí)現(xiàn)和應(yīng)用

    多態(tài)是實(shí)現(xiàn)面向?qū)ο蟮能浖夹g(shù)中必不可少的一個內(nèi)容,所以這篇文章主要來和大家講解一下Java多態(tài)的實(shí)現(xiàn)和應(yīng)用,感興趣的小伙伴可以了解一下
    2023-07-07
  • Java 中分形圖的幾種方法詳解

    Java 中分形圖的幾種方法詳解

    這篇文章主要介紹了Java 中幾種分形的方法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 解決springboot中自定義JavaBean返回的json對象屬性名稱大寫變小寫問題

    解決springboot中自定義JavaBean返回的json對象屬性名稱大寫變小寫問題

    開發(fā)過程中發(fā)現(xiàn)查詢返回的數(shù)據(jù)出現(xiàn)自定義的JavaBean的屬性值大小寫格式出現(xiàn)問題,導(dǎo)致前端無法接受到數(shù)據(jù),目前有四種解決方法,根據(jù)大佬的經(jīng)驗(yàn)之談,前兩種是最簡單便捷的,后兩種是比較通用的方法,需要的朋友可以參考下
    2023-10-10
  • spring mvc中@PathVariable / 帶斜杠方式獲取

    spring mvc中@PathVariable / 帶斜杠方式獲取

    這篇文章主要介紹了spring mvc中@PathVariable / 帶斜杠方式獲取,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

峨眉山市| 禄劝| 平武县| 漳平市| 盐池县| 晋州市| 绿春县| 盐源县| 垫江县| 绥江县| 遂宁市| 扎鲁特旗| 黑山县| 咸阳市| 绥化市| 宁武县| 中江县| 和林格尔县| 周至县| 奉化市| 阳原县| 潮安县| 吉木萨尔县| 武乡县| 莱阳市| 新闻| 万年县| 英超| 额尔古纳市| 甘洛县| 绥中县| 集贤县| 全州县| 永顺县| 中江县| 秦安县| 库伦旗| 盘山县| 大丰市| 葫芦岛市| 余江县|