成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Boot 如何解決多個定時任務阻塞問題?

開發 架構
最近長文擼多了,有點累,今天來點簡單的。今天這篇文章介紹一下Spring Boot 中 如何開啟多線程定時任務?

最近長文擼多了,有點累,今天來點簡單的。

今天這篇文章介紹一下Spring Boot 中 如何開啟多線程定時任務?

為什么Spring Boot 定時任務是單線程的?

想要解釋為什么,一定要從源碼入手,直接從@EnableScheduling這個注解入手,找到了這個ScheduledTaskRegistrar類,其中有一段代碼如下:

  1. protected void scheduleTasks() { 
  2.   if (this.taskScheduler == null) { 
  3.    this.localExecutor = Executors.newSingleThreadScheduledExecutor(); 
  4.    this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor); 
  5.   } 

如果taskScheduler為null,則創建單線程的線程池:Executors.newSingleThreadScheduledExecutor()。

多線程定時任務如何配置?

下面介紹三種方案配置多線程下的定時任務。

1、重寫SchedulingConfigurer#configureTasks()

直接實現SchedulingConfigurer這個接口,設置taskScheduler,代碼如下:

  1. @Configuration 
  2. public class ScheduleConfig implements SchedulingConfigurer { 
  3.     @Override 
  4.     public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { 
  5.         //設定一個長度10的定時任務線程池 
  6.         taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10)); 
  7.     } 

2、通過配置開啟

Spring Boot quartz 已經提供了一個配置用來配置線程池的大小,如下;

  1. spring.task.scheduling.pool.size=10 

只需要在配置文件中添加如上的配置即可生效!

3、結合@Async

@Async這個注解都用過,用來開啟異步任務的,使用@Async這個注解之前一定是要先配置線程池的,配置如下:

  1. @Bean 
  2.   public ThreadPoolTaskExecutor taskExecutor() { 
  3.       ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor(); 
  4.       poolTaskExecutor.setCorePoolSize(4); 
  5.       poolTaskExecutor.setMaxPoolSize(6); 
  6.       // 設置線程活躍時間(秒) 
  7.       poolTaskExecutor.setKeepAliveSeconds(120); 
  8.       // 設置隊列容量 
  9.       poolTaskExecutor.setQueueCapacity(40); 
  10.       poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); 
  11.       // 等待所有任務結束后再關閉線程池 
  12.       poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); 
  13.       return poolTaskExecutor; 
  14.   } 

然后在@Scheduled方法上標注@Async這個注解即可實現多線程定時任務,代碼如下:

  1. @Async 
  2.    @Scheduled(cron = "0/2 * * * * ? "
  3.    public void test2() { 
  4.        System.out.println("..................執行test2................."); 
  5.    } 

總結

 

本篇文章介紹了Spring Boot 中 實現多線程定時任務的三種方案,你喜歡哪一種?

 

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2024-10-15 16:41:35

2012-02-07 13:31:14

SpringJava

2025-01-08 09:55:37

Spring接口數據庫

2023-08-08 08:35:28

web框架Hosting模塊

2022-03-23 11:45:39

Quartz數據庫節點

2024-11-04 16:01:01

2024-10-10 10:32:04

2019-11-26 14:30:20

Spring循環依賴Java

2012-09-05 11:09:15

SELinux操作系統

2018-08-20 07:04:35

2021-09-26 09:17:01

Python命令定時任務

2025-02-24 16:00:00

SpringBoot定時任務開發

2009-10-28 10:05:29

Ubuntucrontab定時任務

2010-03-10 15:47:58

crontab定時任務

2023-11-07 07:47:35

Topic線程PUSH

2010-04-29 17:46:31

Oracle死鎖

2019-02-25 15:44:16

開源RabbitMQSpring Clou

2022-03-28 08:31:29

線程池定時任務

2024-02-28 09:54:07

線程池配置

2017-03-13 09:12:00

TCP數據結構請求包
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www..99re | 国产精品入口 | 久久久青草婷婷精品综合日韩 | 一级午夜aaa免费看三区 | 日韩欧美中文字幕在线观看 | 欧美精品一区二区在线观看 | 日韩视频91| 中文字幕高清av | 免费的av网站| 亚洲精品久久久久久一区二区 | 精品国产欧美 | 在线观看深夜视频 | 亚洲国产精品日韩av不卡在线 | 夜夜爽99久久国产综合精品女不卡 | 在线欧美亚洲 | 综合九九| 亚州av | 国产精品美女视频 | 国产偷自视频区视频 | 成人激情免费视频 | 欧美一区二区三区大片 | 国产日韩一区二区三免费高清 | 黄色综合 | 天天操伊人 | 日韩欧美中文字幕在线观看 | 一级片av | 免费 视频 1级 | 日日夜夜天天 | 久久精品久久综合 | 亚洲在线 | 久久久99精品免费观看 | 欧美性区| 亚洲免费在线视频 | 日韩综合网 | 国产日韩欧美在线播放 | 久久www免费视频 | 视频一二三区 | 91豆花视频 | 国产精品久久久久久久久婷婷 | 色悠悠久| 自拍偷拍亚洲一区 |