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

SpringBoot之解決多個定時任務(wù)阻塞的問題

 更新時間:2024年04月16日 09:22:35   作者:終碼一生  
這篇文章主要介紹了SpringBoot之解決多個定時任務(wù)阻塞的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

SpringBoot解決多個定時任務(wù)阻塞

這篇文章介紹一下Spring Boot 中如何開啟多線程定時任務(wù)?

為什么Spring Boot 定時任務(wù)是單線程的?

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

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

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

多線程定時任務(wù)如何配置?

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

1、重寫SchedulingConfigurer#configureTasks()

直接實(shí)現(xiàn)SchedulingConfigurer這個接口,設(shè)置taskScheduler,代碼如下:

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        //設(shè)定一個長度10的定時任務(wù)線程池
        taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
    }
}

2、通過配置開啟

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

spring.task.scheduling.pool.size=10

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

3、結(jié)合@Async

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

@Bean
public ThreadPoolTaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor();
    poolTaskExecutor.setCorePoolSize(4);
    poolTaskExecutor.setMaxPoolSize(6);
    // 設(shè)置線程活躍時間(秒)
    poolTaskExecutor.setKeepAliveSeconds(120);
    // 設(shè)置隊(duì)列容量
    poolTaskExecutor.setQueueCapacity(40);
    poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
    // 等待所有任務(wù)結(jié)束后再關(guān)閉線程池
    poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
    return poolTaskExecutor;
}

然后在@Scheduled方法上標(biāo)注@Async這個注解即可實(shí)現(xiàn)多線程定時任務(wù),代碼如下:

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

總結(jié)

本篇文章介紹了 Spring Boot 中實(shí)現(xiàn)多線程定時任務(wù)的三種方案,你喜歡哪一種?

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

相關(guān)文章

最新評論

通道| 团风县| 阿城市| 星座| 林甸县| 邵东县| 济源市| 云浮市| 永宁县| 永和县| 彩票| 堆龙德庆县| 武穴市| 工布江达县| 大姚县| 衡南县| 梨树县| 南投县| 彰化县| 怀集县| 集安市| 江达县| 高密市| 兰州市| 平度市| 汉中市| 龙岩市| 定结县| 辽宁省| 阳山县| 南汇区| 凤庆县| 扎赉特旗| 澄江县| 邯郸市| 卢氏县| 秦安县| 沧州市| 衡东县| 双桥区| 西乌|