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

SpringBoot之解決多個(gè)定時(shí)任務(wù)阻塞的問(wèn)題

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

SpringBoot解決多個(gè)定時(shí)任務(wù)阻塞

這篇文章介紹一下Spring Boot 中如何開(kāi)啟多線(xiàn)程定時(shí)任務(wù)?

為什么Spring Boot 定時(shí)任務(wù)是單線(xiàn)程的?

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

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

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

多線(xiàn)程定時(shí)任務(wù)如何配置?

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

1、重寫(xiě)SchedulingConfigurer#configureTasks()

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

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

2、通過(guò)配置開(kāi)啟

Spring Boot quartz 已經(jīng)提供了一個(gè)配置用來(lái)配置線(xiàn)程池的大小,如下;

spring.task.scheduling.pool.size=10

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

3、結(jié)合@Async

@Async這個(gè)注解都用過(guò),用來(lái)開(kāi)啟異步任務(wù)的,使用@Async這個(gè)注解之前一定是要先配置線(xiàn)程池的,配置如下:

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

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

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

總結(jié)

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

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

相關(guān)文章

最新評(píng)論

醴陵市| 景洪市| 施秉县| 许昌市| 舟曲县| 马鞍山市| 鄂温| 孙吴县| 琼结县| 永仁县| 于田县| 禄劝| 阳信县| 西安市| 乳源| 巩留县| 墨脱县| 洪洞县| 原平市| 涞源县| 台湾省| 迁安市| 宽城| 班戈县| 桂平市| 昌邑市| 恩平市| 安远县| 朝阳县| 历史| 新源县| 错那县| 永福县| 忻州市| 思南县| 白山市| 邻水| 英吉沙县| 仁寿县| 农安县| 南乐县|