亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

springboot集成schedule實現定時任務

2024-07-14 08:40:57
字體:
來源:轉載
供稿:網友

背景

在項目開發過程中,我們經常需要執行具有周期性的任務。通過定時任務可以很好的幫助我們實現。

我們拿常用的幾種定時任務框架做一個比較:

springboot,schedule,spring,boot,定時任務

從以上表格可以看出,Spring Schedule框架功能完善,簡單易用。對于中小型項目需求,Spring Schedule是完全可以勝任的。

1、springboot集成schedule

1.1 添加maven依賴包

由于Spring Schedule包含在spring-boot-starter基礎模塊中了,所有不需要增加額外的依賴。

<dependencies>  <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter</artifactId>  </dependency>  <dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-test</artifactId>    <scope>test</scope>  </dependency></dependencies>

1.2 啟動類,添加啟動注解

在springboot入口或者配置類中增加@EnableScheduling注解即可啟用定時任務。

@EnableScheduling@SpringBootApplicationpublic class ScheduleApplication {	public static void main(String[] args) {		SpringApplication.run(ScheduleApplication.class, args);	}}

1.3.添加定時任務

我們將對Spring Schedule三種任務調度器分別舉例說明。

1.3.1 Cron表達式

類似于Linux下的Cron表達式時間定義規則。Cron表達式由6或7個空格分隔的時間字段組成,如下圖:

springboot,schedule,spring,boot,定時任務

常用表達式:

springboot,schedule,spring,boot,定時任務

舉個栗子:

添加一個work()方法,每10秒執行一次。

注意 :當方法的執行時間超過任務調度頻率時,調度器會在下個周期執行。

如:假設work()方法在第0秒開始執行,方法執行了12秒,那么下一次執行work()方法的時間是第20秒。

@Componentpublic class MyTask {	@Scheduled(cron = "0/10 * * * * *")	public void work() {		// task execution logic	}}

1.3.2 固定間隔任務

下一次的任務執行時間,是從方法最后一次任務執行結束時間開始計算。并以此規則開始周期性的執行任務。

舉個栗子:

添加一個work()方法,每隔10秒執行一次。

例如:假設work()方法在第0秒開始執行,方法執行了12秒,那么下一次執行work()方法的時間是第22秒。

@Scheduled(fixedDelay = 1000*10)public void work() {	// task execution logic}

1.3.3 固定頻率任務

按照指定頻率執行任務,并以此規則開始周期性的執行調度。

舉個栗子:

添加一個work()方法,每10秒執行一次。

注意 :當方法的執行時間超過任務調度頻率時,調度器會在當前方法執行完成后立即執行下次任務。

例如:假設work()方法在第0秒開始執行,方法執行了12秒,那么下一次執行work()方法的時間是第12秒。

@Scheduled(fixedRate = 1000*10)public void work() {	// task execution logic}

2、配置TaskScheduler線程池

在實際項目中,我們一個系統可能會定義多個定時任務。那么多個定時任務之間是可以相互獨立且可以并行執行的。

通過查看org.springframework.scheduling.config.ScheduledTaskRegistrar源代碼,發現spring默認會創建一個單線程池。這樣對于我們的多任務調度可能會是致命的,當多個任務并發(或需要在同一時間)執行時,任務調度器就會出現時間漂移,任務執行時間將不確定。

protected void scheduleTasks() {	if (this.taskScheduler == null) {		this.localExecutor = Executors.newSingleThreadScheduledExecutor();		this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor);	}	//省略...}

2.1 自定義線程池

新增一個配置類,實現SchedulingConfigurer接口。重寫configureTasks方法,通過taskRegistrar設置自定義線程池。

@Configurationpublic class ScheduleConfig implements SchedulingConfigurer {	@Override	public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {		taskRegistrar.setScheduler(taskExecutor());	}		@Bean(destroyMethod="shutdown")	public Executor taskExecutor() {		return Executors.newScheduledThreadPool(20);	}}

3、實際應用中的問題

3.1 Web應用中的啟動和關閉問題

我們知道通過spring加載或初始化的Bean,在服務停止的時候,spring會自動卸載(銷毀)。但是由于線程是JVM級別的,如果用戶在Web應用中啟動了一個線程,那么這個線程的生命周期并不會和Web應用保持一致。也就是說,即使Web應用停止了,這個線程依然沒有結束(死亡)。

解決方法:

1)當前對象是通過spring初始化

spring在卸載(銷毀)實例時,會調用實例的destroy方法。通過實現DisposableBean接口覆蓋destroy方法實現。在destroy方法中主動關閉線程。

@Componentpublic class MyTask implements DisposableBean{	@Override	public void destroy() throws Exception {		//關閉線程或線程池		ThreadPoolTaskScheduler scheduler = (ThreadPoolTaskScheduler)applicationContext.getBean("scheduler");		scheduler.shutdown();	}	//省略...}

2)當前對象不是通過spring初始化(管理)

那么我們可以增加一個Servlet上下文監聽器,在Servlet服務停止的時候主動關閉線程。

public class MyTaskListenter implements ServletContextListener{	@Override	public void contextDestroyed(ServletContextEvent arg0) {		//關閉線程或線程池	}	//省略...}

3.2 分布式部署問題

在實際項目中,我們的系統通常會做集群、分布式或災備部署。那么定時任務就可能出現并發問題,即同一個任務在多個服務器上同時在運行。

解決方法(分布式鎖):

1)通過數據庫表鎖

2)通過緩存中間件

3)通過Zookeeper實現

總結:

spring schedule給我們提供了一套簡單、快速、高效、穩定的定時任務框架。但需要考慮線程的生命周期及分布式部署問題。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
福利一区视频在线观看| 欧美激情性做爰免费视频| 成人免费淫片视频软件| 亚洲欧美另类中文字幕| 国产在线视频一区| 成人av电影天堂| 欧美综合激情网| 欧美电影在线播放| 秋霞av国产精品一区| 亚洲午夜女主播在线直播| 国产网站欧美日韩免费精品在线观看| 久久99国产精品久久久久久久久| 91精品视频大全| 9.1国产丝袜在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 精品国产拍在线观看| 国语自产精品视频在免费| 久久久久久久亚洲精品| 国产精品日韩精品| 免费91麻豆精品国产自产在线观看| 911国产网站尤物在线观看| 91av在线精品| 国产日韩综合一区二区性色av| 欧美激情一级欧美精品| 68精品久久久久久欧美| 成人国产精品av| 亚洲国内高清视频| 91精品国产一区| 精品成人乱色一区二区| 在线成人中文字幕| 中文字幕亚洲图片| 欧美电影免费在线观看| 97碰在线观看| 国产精品视频网| 精品中文字幕乱| 国产成人+综合亚洲+天堂| 国产一区二区三区毛片| 亚洲自拍欧美色图| 精品视频久久久| 国产精品免费一区豆花| 久久精品国产成人精品| 黄色一区二区在线| 中文字幕亚洲欧美日韩2019| 国产亚洲精品91在线| 国产香蕉一区二区三区在线视频| 久热爱精品视频线路一| 成人观看高清在线观看免费| 国产精品久久久久免费a∨大胸| 成人午夜在线观看| 欧美中文字幕在线| 国产精品亚洲第一区| 欧美精品videosex极品1| 日韩在线视频导航| 成人女保姆的销魂服务| 91精品在线看| 精品国偷自产在线视频99| 日韩精品中文字幕在线播放| 欧美一级高清免费| 欧美日韩国产丝袜美女| 777777777亚洲妇女| 欧美大片在线看| 伦理中文字幕亚洲| 国产精品美女999| 在线观看欧美日韩国产| 日日狠狠久久偷偷四色综合免费| 久久艳片www.17c.com| www.xxxx精品| 亚洲精品国产精品国自产在线| 久久久久久久久久国产| 国产在线久久久| 欧美日韩美女在线观看| 中文字幕精品国产| 欧美激情亚洲自拍| 亚洲a中文字幕| 国产极品jizzhd欧美| 在线精品播放av| 亚洲人线精品午夜| 欧美日韩精品国产| 日韩美女视频在线观看| 亚洲精品成人网| 亚洲成人久久久久| 狠狠综合久久av一区二区小说| 成人黄色免费网站在线观看| 91在线高清免费观看| 欧美电影免费观看高清完整| 黑人巨大精品欧美一区二区| 成人免费在线网址| 欧美成人四级hd版| 韩国美女主播一区| 国产亚洲在线播放| 久久精品中文字幕电影| 久久精品99国产精品酒店日本| 精品亚洲国产成av人片传媒| 欧美色另类天堂2015| 宅男66日本亚洲欧美视频| 国产成人一区二区三区| 日韩精品免费在线| 国产专区欧美专区| 亚洲视频综合网| 欧美大片欧美激情性色a∨久久| 国产日韩欧美日韩| 欧洲亚洲免费在线| 国产91精品久久久久久| 日韩欧美亚洲国产一区| 欧美在线一级va免费观看| 亚洲精品免费av| 91久久国产婷婷一区二区| 日韩亚洲精品视频| 深夜精品寂寞黄网站在线观看| 国产精品69久久| 91av在线视频观看| 久久久久久中文字幕| 97精品国产91久久久久久| 久久99国产精品自在自在app| 2020欧美日韩在线视频| 国产suv精品一区二区三区88区| 日本韩国欧美精品大片卡二| 久久99久久99精品免观看粉嫩| 国产婷婷97碰碰久久人人蜜臀| 久久成人综合视频| 欧美精品videosex性欧美| 国产精品你懂得| 欧美电影《睫毛膏》| 亚洲欧美视频在线| 一本一本久久a久久精品牛牛影视| 中文字幕久久久| 国产精品中文字幕在线| 欧美日韩国产精品一区二区不卡中文| 91精品久久久久久久久| 色偷偷9999www| 国产精品久久久久久超碰| 国产精品久久久久久久久久尿| 欧美激情在线观看| 欧美成人午夜激情| 日韩中文字幕视频在线观看| 亚洲国产精品久久精品怡红院| 亚洲一区精品电影| 久久久国产精彩视频美女艺术照福利| 国产欧美精品xxxx另类| 国产精品美腿一区在线看| 欧美丝袜美女中出在线| 2019中文字幕在线免费观看| 91麻豆桃色免费看| 国产一区二区色| 国产精品久久久久久久久久| 久久久av网站| 亚洲综合日韩中文字幕v在线| 亚洲人精品午夜在线观看| 亚洲精品suv精品一区二区| 亚洲精选在线观看| 欧美怡春院一区二区三区| 久久综合五月天| 日韩国产精品视频| 韩国国内大量揄拍精品视频| 欧美日韩精品国产| 成人黄色在线播放| 亚洲国产精品成人va在线观看| 精品国产一区二区在线| 久久久久久成人| 热久久免费视频精品| 国产亚洲精品一区二区| 日韩欧美综合在线视频| 久久国产精品影视| 国产精品爽黄69|