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

SpringBoot使用@Scheduled定時(shí)器的示例詳解

 更新時(shí)間:2025年07月29日 10:29:36   作者:FlyLikeButterfly  
SpringBoot的@Scheduled注解用于配置定時(shí)任務(wù),需啟用@EnableScheduling,支持fixedRate、fixedDelay、cron等參數(shù),控制執(zhí)行頻率、延遲及周期,支持線程池和異常處理配置,默認(rèn)單線程串行執(zhí)行,本文介紹SpringBoot使用@Scheduled定時(shí)器的操作示例,感興趣的朋友一起看看吧

@Scheduled注解是 Spring Boot 提供的定時(shí)任務(wù)配置工具,用于控制任務(wù)執(zhí)行時(shí)間。

使用方法:

  1. 先啟用定時(shí)器配置,添加注解@EnableScheduling,可在@SpringBootApplication或者@Configuration或者@Component等spring能夠掃描到的地方;
  2. 在spring能夠識(shí)別的類(lèi)中定義沒(méi)有返回值和參數(shù)的方法,在方法上使用@Scheduled注解;

@Scheduled注解的參數(shù)解釋?zhuān)?/h2>
  • fixedRate:固定速率(ms),按照每次任務(wù)的開(kāi)始時(shí)間間隔執(zhí)行(定時(shí)器啟動(dòng)的時(shí)候每次開(kāi)始時(shí)間就已確定),上一次任務(wù)執(zhí)行時(shí)間超過(guò)后面的任務(wù)開(kāi)始時(shí)間,后面任務(wù)會(huì)積壓到隊(duì)列里,等這個(gè)時(shí)間很長(zhǎng)的任務(wù)結(jié)束后,隊(duì)列里的積壓任務(wù)全部同時(shí)放行;
  • fixedRateString:同上,字符串類(lèi)型,支持${}占位符,可靈活配置;
  • fixedDelay:固定延遲(ms),以上次的結(jié)束時(shí)間開(kāi)始延遲一定時(shí)間執(zhí)行下一次,不會(huì)積壓;
  • fixedDelayString:同上,字符串類(lèi)型,支持${}占位符,可靈活配置;
  • initialDelay:延遲啟動(dòng)定時(shí)器時(shí)間(ms),指定一段時(shí)間后才開(kāi)始啟動(dòng)定時(shí)器;
  • initialDelayString:同上,字符串類(lèi)型,支持${}占位符,可靈活配置;
  • cron:cron表達(dá)式,比上面的更靈活,字符串類(lèi)型,支持${}占位符,上次任務(wù)如果超時(shí)會(huì)自動(dòng)丟棄當(dāng)前時(shí)間應(yīng)該執(zhí)行的任務(wù);(跟linux的cron稍有區(qū)別,linux的是“分時(shí)日月周”,這個(gè)是“秒分時(shí)日月周[年]”,多了秒和可省略的年)
  • zone:時(shí)區(qū),一般默認(rèn)即可,自動(dòng)使用服務(wù)器時(shí)區(qū),也可指定如“Asia/Shanghai”;

PS:占位符可以只占String的一部分;定時(shí)器里如果拋出異常不會(huì)影響下一次任務(wù);對(duì)cron的簡(jiǎn)單理解,可以把每個(gè)字段的設(shè)置都解釋為一個(gè)整數(shù)數(shù)組,例如在秒字段上的0/10,可以解釋成[0, 10, 20, 30, 40, 50],在月字段上的*表示所有值,可解釋成[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],也就是每個(gè)月都有;

測(cè)試代碼:

啟動(dòng)類(lèi):

package testspringschedule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class TestSpringSchedule {
	public static void main(String[] args) {
		System.out.println("main start");
		SpringApplication.run(TestSpringSchedule.class, args);
	}
}

測(cè)試fixedRate:

package testspringschedule;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
//@Configuration
@Component
//@EnableScheduling
public class MyRateSchedule {
	@Scheduled(fixedRate = 5000, initialDelay = 3000, zone = "Asia/Shanghai")
//	@Scheduled(fixedRateString = "5000", initialDelayString = "3000")
//	@Scheduled(fixedRateString = "${abc:5}000", initialDelayString = "${def:3000}")
	public void test1() {
		System.out.println("fixedRate start:" + new Date());
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("fixedRate stop:" + new Date());
	}
	private int i = 0;
//	@Scheduled(fixedRate = 1000, initialDelay = 3000)
	public void test2() {
		System.out.println("fixedRate start:" + new Date());
		i++;
		System.out.println(i);
		if (i == 5) {
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		System.out.println("fixedRate stop:" + new Date());
	}
}

test1()執(zhí)行結(jié)果,開(kāi)始時(shí)間都是間隔5s:

test2()執(zhí)行結(jié)果,開(kāi)始時(shí)間間隔1s,超時(shí)積壓多個(gè)任務(wù)等上一個(gè)任務(wù)結(jié)束后全部同時(shí)執(zhí)行;

測(cè)試fixedDelay:

package testspringschedule;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyDelaySchedule {
	@Scheduled(fixedDelay = 5000, initialDelay = 3000)
	public void test1() {
		System.out.println("fixedDelay start:" + new Date());
		try {
			Thread.sleep(3000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("fixedDelay stop:" + new Date());
	}
}

執(zhí)行結(jié)果:

測(cè)試cron:

package testspringschedule;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MyCronSchedule {
	@Scheduled(cron = "50/2 * * * * ?")
//	@Scheduled(cron = "${s:1/2 * * * * ?}")
//	@Scheduled(cron = "${s:0/5} * * * * ?")
	public void test1() {
		System.out.println("cron:" + new Date());
	}
//	@Scheduled(cron = "0/10 * * * * ?")
	public void test2() {
		System.out.println("cron start:" + new Date());
		try {
			Thread.sleep(11000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("cron stop:" + new Date());
	}
}

test1()執(zhí)行結(jié)果:

test2()執(zhí)行結(jié)果,超時(shí)丟棄:

也可以實(shí)現(xiàn)SchedulingConfigurer接口,使用配置類(lèi)進(jìn)行線程池、異常處理、拒絕策略等的一些配置:(默認(rèn)配置所有定時(shí)器都是單線程串行的)

package testspringschedule;
import java.util.concurrent.ThreadPoolExecutor;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.util.ErrorHandler;
@Configuration
public class MyScheduleConfig implements SchedulingConfigurer {
	@Override
	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
		final ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(50);
        taskScheduler.setThreadGroupName("Scheduled-Group");
        taskScheduler.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
        taskScheduler.setErrorHandler(new ErrorHandler() {
			@Override
			public void handleError(Throwable t) {
				System.out.println("發(fā)生未捕獲異常:");
				t.printStackTrace();
			}
		});
        taskScheduler.initialize();
        taskRegistrar.setTaskScheduler(taskScheduler);
	}
}

到此這篇關(guān)于SpringBoot使用@Scheduled定時(shí)器的文章就介紹到這了,更多相關(guān)SpringBoot @Scheduled定時(shí)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 偽造http請(qǐng)求ip地址的方法

    java 偽造http請(qǐng)求ip地址的方法

    這篇文章主要介紹了java 偽造http請(qǐng)求ip地址的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • java關(guān)于并發(fā)模型中的兩種鎖知識(shí)點(diǎn)詳解

    java關(guān)于并發(fā)模型中的兩種鎖知識(shí)點(diǎn)詳解

    在本篇文章了小編給大家整理的是一篇關(guān)于java關(guān)于并發(fā)模型中的兩種鎖知識(shí)點(diǎn)詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • springboot?aop里的@Pointcut()的配置方式

    springboot?aop里的@Pointcut()的配置方式

    這篇文章主要介紹了springboot?aop里的@Pointcut()的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 解決IDEA JSP沒(méi)有代碼提示問(wèn)題的幾種方法

    解決IDEA JSP沒(méi)有代碼提示問(wèn)題的幾種方法

    這篇文章主要介紹了解決IDEA JSP沒(méi)有代碼提示問(wèn)題的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Servlet實(shí)現(xiàn)文件的上傳與下載

    Servlet實(shí)現(xiàn)文件的上傳與下載

    這篇文章主要為大家詳細(xì)介紹了Servlet實(shí)現(xiàn)文件的上傳與下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問(wèn)題

    java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問(wèn)題

    這篇文章主要介紹了java打印表格 將ResultSet中的數(shù)據(jù)打印成表格問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用Java將海量扁平數(shù)據(jù)高效轉(zhuǎn)化為類(lèi)目字典樹(shù)

    使用Java將海量扁平數(shù)據(jù)高效轉(zhuǎn)化為類(lèi)目字典樹(shù)

    在電商 ERP 與 OMS 系統(tǒng)的重構(gòu)中,構(gòu)建多級(jí)商品類(lèi)目樹(shù)是一個(gè)經(jīng)典場(chǎng)景,本文結(jié)合實(shí)際對(duì)接海外電商平臺(tái)的業(yè)務(wù)場(chǎng)景,探討如何利用哈希映射將解析的時(shí)間復(fù)雜度從 O(N2) 降至 O(N),并分享了關(guān)于內(nèi)存預(yù)分配與本地緩存的進(jìn)階優(yōu)化思考,需要的朋友可以參考下
    2026-04-04
  • springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問(wèn)題解決)

    springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問(wèn)題解決)

    這篇文章主要給大家介紹了關(guān)于springboot如何實(shí)現(xiàn)異步響應(yīng)請(qǐng)求(前端請(qǐng)求超時(shí)的問(wèn)題解決)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用springboot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-01-01
  • JavaEE中關(guān)于ServletConfig的小結(jié)

    JavaEE中關(guān)于ServletConfig的小結(jié)

    ServletConfig是針對(duì)特定的Servlet的參數(shù)或?qū)傩?。ServletConfig是表示單獨(dú)的Servlet的配置和參數(shù),只是適用于特定的Servlet。從一個(gè)servlet被實(shí)例化后,對(duì)任何客戶端在任何時(shí)候訪問(wèn)有效,但僅對(duì)本servlet有效,一個(gè)servlet的ServletConfig對(duì)象不能被另一個(gè)servlet訪問(wèn)
    2014-10-10
  • springboot 接口返回字符串帶引號(hào)的問(wèn)題解決

    springboot 接口返回字符串帶引號(hào)的問(wèn)題解決

    本文主要介紹了springboot 接口返回字符串帶引號(hào)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

阆中市| 界首市| 瓮安县| 册亨县| 香港 | 湛江市| 安远县| 垫江县| 阿合奇县| 西青区| 鲜城| 奎屯市| 克拉玛依市| 泸水县| 防城港市| 荆州市| 临西县| 鲜城| 祁东县| 永定县| 双辽市| 余姚市| 万载县| 穆棱市| 林芝县| 松原市| 佛学| 项城市| 井陉县| 射洪县| 于都县| 柳江县| 东乌珠穆沁旗| 衡东县| 若尔盖县| 沙坪坝区| 潮州市| 三原县| 温州市| 和硕县| 通许县|