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

關(guān)于@Scheduled參數(shù)及cron表達(dá)式解釋

 更新時(shí)間:2021年12月23日 15:20:45   作者:Qiwany  
這篇文章主要介紹了關(guān)于@Scheduled參數(shù)及cron表達(dá)式解釋,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

@Scheduled參數(shù)及cron表達(dá)式解釋

@Scheduled支持以下8個(gè)參數(shù)

  • 1.cron:表達(dá)式,指定任務(wù)在特定時(shí)間執(zhí)行;
  • 2.fixedDelay:表示上一次任務(wù)執(zhí)行完成后多久再次執(zhí)行,參數(shù)類型為long,單位ms;
  • 3.fixedDelayString:與fixedDelay含義一樣,只是參數(shù)類型變?yōu)镾tring;
  • 4.fixedRate:表示按一定的頻率執(zhí)行任務(wù),即每次開始執(zhí)行的時(shí)間間隔一致,參數(shù)類型為long,單位ms;
  • 5.fixedRateString:與fixedRate的含義一樣,只是將參數(shù)類型變?yōu)镾tring;
  • 6.initialDelay:表示延遲多久再第一次執(zhí)行任務(wù),參數(shù)類型為long,單位ms;
  • 7.initialDelayString:與initialDelay的含義一樣,只是將參數(shù)類型變?yōu)镾tring;
  • 8.zone:時(shí)區(qū),默認(rèn)為當(dāng)前時(shí)區(qū)。

cron表達(dá)式是一個(gè)字符串,以空格分開共6個(gè)域

  • [秒] [分] [時(shí)] [日] [月] [周]
  • spring自帶的定時(shí)任務(wù)cron表達(dá)式不支持年

如圖:

在這里插入圖片描述

上圖類中有如下源代碼:

private void parse(String expression) throws IllegalArgumentException {
	String[] fields = StringUtils.tokenizeToStringArray(expression, " ");
	if (!areValidCronFields(fields)) {
		throw new IllegalArgumentException(String.format(
				"Cron expression must consist of 6 fields (found %d in \"%s\")", fields.length, expression));
	}
	doParse(fields);
}
private static boolean areValidCronFields(String[] fields) {
	return (fields != null && fields.length == 6);
}

代碼中expression參數(shù)即cron表達(dá)式,所以在spring自帶的定時(shí)任務(wù)中正確的cron表達(dá)式只能是6個(gè)域,否則會(huì)拋出IllegalArgumentException提示:Cron expression must consist of 6 fields(cron表達(dá)式必須由6個(gè)域組成)。

必填 允許值 允許的通配符
秒(seconds) 0-59整數(shù) , - * /
分(minutes) 0-59整數(shù) , - * /
時(shí)(hours) 0-23整數(shù) , - * /
日(daysOfMonth) 1-31整數(shù)(需要考慮月的天數(shù)) , - * ? / L W
月(months) 1-12整數(shù) 或 JAN-DEC , - * /
周 (daysOfWeek) 1-7整數(shù) 或 SUN-SAT , - * ? / L #

通配符說明

  • *:表示匹配該域的任意值。在minutes域使用 * 表示每分鐘。在months里表示每個(gè)月。在daysOfWeek域表示一周的每一天。
  • ?:只能用在daysofMonth和daysofWeek兩個(gè)域,表示不指定值,當(dāng)兩個(gè)子表達(dá)式其中之一被指定了值以后,為了避免沖突,需要將另一個(gè)子表達(dá)式的值設(shè)為 ?。因?yàn)閐aysofMonth和daysofWeek會(huì)相互影響。例如想在每月的2號(hào)觸發(fā)調(diào)度,不管2號(hào)是周幾,則只能使用如下寫法:0 0 0 2 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管周幾都會(huì)觸發(fā)。
  • -:表示范圍。例如在minutes域使用5-20,表示從5分到20分鐘每分鐘觸發(fā)一次
  • /:表示起始時(shí)間開始觸發(fā),然后每隔固定時(shí)間觸發(fā)一次。例如在minutes域使用5/20,則意味著從當(dāng)前小時(shí)的第5分鐘開每20分鐘觸發(fā)一次。
  • ,:表示列出枚舉值。例如:在minutes域使用5,20,則意味著在5分和20分時(shí)各觸發(fā)一次。
  • L:表示最后,是單詞“l(fā)ast”的縮寫,只能出現(xiàn)在daysofWeek和dayofMonth域。在daysofWeek域使用5L意思是在指定月的最后的一個(gè)星期四觸發(fā)。在dayofMonth域使用5L或者FRIL意思是在指定月的倒數(shù)第5天觸發(fā)。在使用L參數(shù)時(shí),不要指定列表或范圍。
  • W:表示有效工作日(周一到周五),只能出現(xiàn)在daysofMonth域,系統(tǒng)將在離指定日期的最近的有效工作日觸發(fā)事件。例如:在daysofMonth使用5W,如果5號(hào)是周六,則將在最近的工作日周五,即4號(hào)觸發(fā)。如果5號(hào)是周日,則在6日(周一)觸發(fā)。如果5日在星期一到星期五中的一天,則就在5日觸發(fā)。另外,W的最近尋找不會(huì)跨過月份 。
  • LW:這兩個(gè)字符可以連用,表示指定月的最后一個(gè)工作日。
  • #:用于確定每個(gè)月第幾個(gè)周幾,只能出現(xiàn)在daysofMonth域。例如在4#2,表示某月的第二個(gè)周三。

常用表達(dá)式示例

  • 0/2 * * * * ? 表示每2秒 執(zhí)行任務(wù)
  • 0 0/2 * * * ? 表示每2分鐘 執(zhí)行任務(wù)
  • 0 0 2 1 * ? 表示在每月的1日的凌晨2點(diǎn)調(diào)整任務(wù)
  • 0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15執(zhí)行作業(yè)
  • 0 0 10,14,16 * * ? 每天上午10點(diǎn),下午2點(diǎn),4點(diǎn)
  • 0 0/30 9-17 * * ? 朝九晚五工作時(shí)間內(nèi)每半小時(shí)
  • 0 0 12 ? * WED 表示每個(gè)星期三中午12點(diǎn)
  • 0 0 12 * * ? 每天中午12點(diǎn)觸發(fā)
  • 0 15 10 ? * * 每天上午10:15觸發(fā)
  • 0 15 10 * * ? 每天上午10:15觸發(fā)
  • 0 15 10 * * ? 每天上午10:15觸發(fā)
  • 0 * 14 * * ? 在每天下午2點(diǎn)到下午2:59期間的每1分鐘觸發(fā)
  • 0 0/5 14 * * ? 在每天下午2點(diǎn)到下午2:55期間的每5分鐘觸發(fā)
  • 0 0/5 14,18 * * ? 在每天下午2點(diǎn)到2:55期間和下午6點(diǎn)到6:55期間的每5分鐘觸發(fā)
  • 0 0-5 14 * * ? 在每天下午2點(diǎn)到下午2:05期間的每1分鐘觸發(fā)
  • 0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44觸發(fā)
  • 0 15 10 ? * MON-WED,SAT 周一至周三和周六的上午10:15觸發(fā)
  • 0 15 10 15 * ? 每月15日上午10:15觸發(fā)
  • 0 15 10 L * ? 每月最后一日的上午10:15觸發(fā)
  • 0 15 10 ? * 6L 每月的最后一個(gè)星期五上午10:15觸發(fā)
  • 0 15 10 ? * 6#3 每月的第三個(gè)星期五上午10:15觸發(fā)

@Scheduled 定時(shí)任務(wù)總結(jié)

@Scheduled

  • 作用:spring定時(shí)器(定時(shí)執(zhí)行一次或定時(shí)輪詢執(zhí)行一段代碼)
  • 使用場(chǎng)景:注解在方法上
  • 參數(shù)說明:常用參數(shù)

@Scheduled 參數(shù)說明

  • String cron:cron表達(dá)式定義了方法執(zhí)行的時(shí)間規(guī)則(網(wǎng)上對(duì)這個(gè)的說明很多就不墨跡了)

生成器工具地址-http://cron.qqe2.com/

  • Long fixedDelay:定時(shí)任務(wù)每隔多久執(zhí)行一次,單位是毫秒,上一次任務(wù)結(jié)束后開始計(jì)算下次執(zhí)行的時(shí)間。

例子:@Scheduled(fixedDelay = 1000 * 10) //10秒發(fā)送一次

······················scheduled1開始執(zhí)行·······················2018-07-27 14:00:00

······················scheduled1結(jié)束執(zhí)行·······················2018-07-27 14:00:05

······················scheduled2開始執(zhí)行·······················2018-07-27 14:00:15

······················scheduled2結(jié)束執(zhí)行·······················2018-07-27 14:00:20

······················scheduled3開始執(zhí)行·······················2018-07-27 14:00:30

······················scheduled3結(jié)束執(zhí)行·······················2018-07-27 14:00:35

  • Long fixedRate:與fixedDelay一樣表示定時(shí)任務(wù)的執(zhí)行時(shí)間間隔,不同的是fixedRate的不會(huì)受到上一次任務(wù)結(jié)束時(shí)間的影響

例子:@Scheduled(fixedRate = 1000 * 10) //10秒發(fā)送一次

······················scheduled1開始執(zhí)行·······················2018-07-27 14:00:00

······················scheduled1結(jié)束執(zhí)行·······················2018-07-27 14:00:05

······················scheduled2開始執(zhí)行·······················2018-07-27 14:00:10

······················scheduled2結(jié)束執(zhí)行·······················2018-07-27 14:00:15

······················scheduled3開始執(zhí)行·······················2018-07-27 14:00:20

······················scheduled3結(jié)束執(zhí)行·······················2018-07-27 14:00:25

  • Long initialDelay:項(xiàng)目啟動(dòng)后不馬上執(zhí)行定時(shí)器,根據(jù)initialDelay的值延時(shí)執(zhí)行。

注意事項(xiàng)

1.定時(shí)器的參數(shù)有兩種寫法是用cron表達(dá)式,或者使用fixedDelay、fixedRate等參數(shù)直接配置

需要注意的是 使用cron表達(dá)式的方法,在項(xiàng)目首次啟動(dòng)后不會(huì)直接運(yùn)行,而是等到執(zhí)行周期才會(huì)執(zhí)行

而使用第二種方式的定時(shí)器方法,在項(xiàng)目啟動(dòng)成功后會(huì)馬上開始執(zhí)行一次,再按照時(shí)間周期執(zhí)行。

測(cè)試說明:

使用第一種配置方式,項(xiàng)目啟動(dòng)后方法不會(huì)執(zhí)行,而是等到執(zhí)行周期到了才會(huì)執(zhí)行方法

使用第二種參數(shù)方式的方法,項(xiàng)目啟動(dòng)成功后馬上執(zhí)行了一次

2.定時(shí)器默認(rèn)為單線程,所以如果項(xiàng)目中使用多個(gè)定時(shí)器要配置線程池

注意這里的@EnableScheduling,使用它來(lái)開啟定時(shí)器注解

@Configuration
@EnableScheduling
public class SchedulingConfig implements SchedulingConfigurer { 
	@Override
	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
		taskRegistrar.setScheduler(taskExecutor());
	}
 
	@Bean(destroyMethod="shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(5 ,new ThreadFactory() {
        	private final AtomicLong counter = new AtomicLong();
			
			@Override
			public Thread newThread(Runnable r) {
				Thread thread = new Thread(r);
				thread.setName("test-scheduler-" + counter.incrementAndGet());
				return thread;
			}			
		});
    }	
}

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

相關(guān)文章

  • SpringMVC請(qǐng)求參數(shù)的使用總結(jié)

    SpringMVC請(qǐng)求參數(shù)的使用總結(jié)

    在日常使用SpringMVC進(jìn)行開發(fā)的時(shí)候,有可能遇到前端各種類型的請(qǐng)求參數(shù),本文主要接介紹了SpringMVC請(qǐng)求參數(shù)的使用總結(jié),感興趣的可以了解一下
    2021-06-06
  • SpringBoot集成MyBatis的三種方式

    SpringBoot集成MyBatis的三種方式

    Spring Boot與MyBatis的集成為Java開發(fā)者提供了一種簡(jiǎn)便而強(qiáng)大的方式來(lái)訪問和操作數(shù)據(jù)庫(kù),在本文中,我們將深入解析Spring Boot集成MyBatis的多種方式,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-12-12
  • Java 常量字符串過長(zhǎng)的解決方法

    Java 常量字符串過長(zhǎng)的解決方法

    這篇文章主要介紹了Java 常量字符串過長(zhǎng)的解決方法,常量字符串過長(zhǎng)會(huì)提示報(bào)錯(cuò),下面我們就一起來(lái)了解一下解決方法
    2021-04-04
  • Java中怎樣使用JSON進(jìn)行文件解析

    Java中怎樣使用JSON進(jìn)行文件解析

    這篇文章主要介紹了Java中怎樣使用JSON進(jìn)行文件解析問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java零基礎(chǔ)講解異常

    Java零基礎(chǔ)講解異常

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機(jī)制是我們java語(yǔ)言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等
    2022-04-04
  • Java中for循環(huán)的執(zhí)行過程分析

    Java中for循環(huán)的執(zhí)行過程分析

    這篇文章主要介紹了Java中for循環(huán)的執(zhí)行過程,實(shí)例分析了for循環(huán)的執(zhí)行原理與順序,對(duì)于深入理解Java具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • java多線程中的volatile和synchronized用法分析

    java多線程中的volatile和synchronized用法分析

    這篇文章主要介紹了java多線程中的volatile和synchronized用法分析,以實(shí)例的形式分析了在多線程中volatile和synchronized的用法區(qū)別與使用原理,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • IntelliJ IDEA 老司機(jī)居然還沒用過 Stream Trace功能(問題小結(jié))

    IntelliJ IDEA 老司機(jī)居然還沒用過 Stream Trace功能(問題小結(jié))

    很多朋友酷愛Java8 Stream功能,但是在使用過程中總不是那么順利,下面通過本文給大家分享idea Stream Trace調(diào)試過程遇到的問題,需要的朋友參考下吧
    2021-05-05
  • Idea實(shí)現(xiàn)接口的方法上無(wú)法添加@Override注解的解決方案

    Idea實(shí)現(xiàn)接口的方法上無(wú)法添加@Override注解的解決方案

    文章介紹了在IDEA中實(shí)現(xiàn)接口方法時(shí)無(wú)法添加@Override注解的問題及其解決方法,主要步驟包括更改項(xiàng)目結(jié)構(gòu)中的Language level到支持該注解的版本,以及在pom.xml文件中指定maven-compiler-plugin的版本以解決自動(dòng)更新后的問題
    2025-02-02
  • java多線程下載文件原理解析

    java多線程下載文件原理解析

    這篇文章主要為大家詳細(xì)介紹了java多線程下載文件原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04

最新評(píng)論

水城县| 鄢陵县| 翁源县| 灵宝市| 南部县| 锦屏县| 大竹县| 深水埗区| 扎赉特旗| 长岭县| 和龙市| 饶阳县| 阳泉市| 广灵县| 云龙县| 桃园市| 吐鲁番市| 金川县| 比如县| 娄底市| 友谊县| 桃园县| 南阳市| 斗六市| 乐陵市| 清苑县| 安国市| 苗栗县| 高淳县| 谷城县| 夏河县| 泸溪县| 韩城市| 新营市| 泗洪县| 安远县| 嘉荫县| 华坪县| 黑河市| 砀山县| 吉安市|