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

Spring Boot中配置定時(shí)任務(wù)、線程池與多線程池執(zhí)行的方法

 更新時(shí)間:2019年09月05日 16:39:10   作者:Half  
這篇文章主要給大家介紹了關(guān)于Spring Boot中配置定時(shí)任務(wù)、線程池與多線程池執(zhí)行的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

配置基礎(chǔ)的定時(shí)任務(wù)

最基本的配置方法,而且這樣配置定時(shí)任務(wù)是單線程串行執(zhí)行的,也就是說每次只能有一個(gè)定時(shí)任務(wù)可以執(zhí)行,可以試著聲明兩個(gè)方法,在方法內(nèi)寫一個(gè)死循環(huán),會發(fā)現(xiàn)一直卡在一個(gè)任務(wù)上不動(dòng),另一個(gè)也沒有執(zhí)行。

1、啟動(dòng)類

添加@EnableScheduling開啟對定時(shí)任務(wù)的支持

@EnableScheduling
@SpringBootApplication
public class TestScheduledApplication extends SpringBootServletInitializer {

 @Override 
 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
  return builder.sources(this.getClass());
 }

 public static void main(String[] args) {
  new SpringApplicationBuilder(TestScheduledApplication.class).web(true).run(args);
 }
}

2、配置執(zhí)行定時(shí)任務(wù)的類

添加@Component掃描本類,在方法上添加@Scheduled注解聲明定時(shí)任務(wù),配置時(shí)間周期

@Component
public class TestTask1 {
 private static final Logger logger = LogManager.getLogger();

 // 間隔1秒執(zhí)行一次
 @Scheduled(cron = "0/1 * * * * ?")
 public void method1() {
  logger.info("——————————method1 start——————————");
  logger.info("——————————method1 end——————————");
 }
}

配置線程池執(zhí)行定時(shí)任務(wù)

因?yàn)橛袝r(shí)候需要執(zhí)行的定時(shí)任務(wù)會很多,如果是串行執(zhí)行會帶來一些問題,比如一個(gè)很耗時(shí)的任務(wù)阻塞住了,一些需要短周期循環(huán)執(zhí)行的任務(wù)也會卡住,所以可以配置一個(gè)線程池來并行執(zhí)行定時(shí)任務(wù)

1、配置線程池

添加@EnableAsync開啟對異步的支持

@Configuration
@EnableAsync
public class ExecutorConfig {
 
 @Bean
 public Executor executor1() {
  ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
  executor.setThreadNamePrefix("test-schedule2-");
  executor.setMaxPoolSize(20);
  executor.setCorePoolSize(15);
  executor.setQueueCapacity(0);
  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
  return executor;
 }
}

2、配置定時(shí)任務(wù)異步執(zhí)行

添加@Async注解,表示該定時(shí)任務(wù)是異步執(zhí)行的,因?yàn)樯厦婢€程池配置了名字,所以可以看到打印的日志是該線程池中的線程在執(zhí)行任務(wù),如果沒有配置線程池的話會默認(rèn)使用SimpleAsyncTaskExecutor,這個(gè)異步執(zhí)行器每次都會開啟一個(gè)子線程執(zhí)行,性能消耗比較大,所以最好是自己配置線程池

@Async
@Scheduled(cron = "0/1 * * * * ?")
public void method1() {
 logger.info("——————————method1 start——————————");
 logger.info("——————————method1 end——————————");
}

配置多個(gè)線程池分別執(zhí)行不同的定時(shí)任務(wù)

因?yàn)橛行┒〞r(shí)任務(wù)是比較重要的,有些則是不太重要的,想把定時(shí)任務(wù)分別放到不同的線程池中,也是可以實(shí)現(xiàn)的。

1、配置多個(gè)線程池

分別配置兩個(gè)線程池

@Configuration
@EnableAsync
public class ExecutorConfig1 {

 @Bean
 public Executor executor1() {
  ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
  executor.setThreadNamePrefix("test-schedule1-");
  executor.setMaxPoolSize(20);
  executor.setCorePoolSize(15);
  executor.setQueueCapacity(0);
  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
  return executor;
 }

 
 @Bean
 public Executor executor2() {
  ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
  executor.setThreadNamePrefix("test-schedule2-");
  executor.setMaxPoolSize(20);
  executor.setCorePoolSize(15);
  executor.setQueueCapacity(0);
  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
  return executor;
  }
}

2、定時(shí)任務(wù)顯示指定調(diào)用線程池

因?yàn)樯厦嬖谂渲妙惱锩娉跏蓟藘蓚€(gè)線程池,所以會有兩個(gè)線程池分別叫executor1和executor1被生成放到容器中,因?yàn)锧Bean注解生成的對象默認(rèn)就是和方法名相同的名字,而@Async注解是可以指定使用哪個(gè)線程池的。這樣就可以在不同的線程池中執(zhí)行不同的定時(shí)任務(wù)了

// 間隔1秒執(zhí)行一次
@Async("executor1")
@Scheduled(cron = "0/1 * * * * ?")
public void method1() {
 logger.info("——————————method1 start——————————");
 logger.info("——————————method1 end——————————");
}

// 間隔1秒執(zhí)行一次
@Scheduled(cron = "0/1 * * * * ?")
@Async("executor2")
public void method2() {
 logger.info("——————————method2 start——————————");
 logger.info("——————————method2 end——————————");
}

注意:

  1. 沒有配置自己的線程池時(shí),會默認(rèn)使用SimpleAsyncTaskExecutor。
  2. 如果項(xiàng)目中只配置了一個(gè)線程池,那么不需要顯示指定使用這個(gè)線程池,spring也會自動(dòng)使用用戶配置的線程池,但是如果配置了多個(gè)就必須要顯示指定,否則還是會使用默認(rèn)的。
  3. 如果想要指定使用哪個(gè)線程池,可以使用@Async("executor2")顯示指定。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java版數(shù)獨(dú)游戲核心算法(一)

    java版數(shù)獨(dú)游戲核心算法(一)

    這篇文章主要為大家詳細(xì)介紹了java版數(shù)獨(dú)游戲的核心算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 利用mysql實(shí)現(xiàn)的雪花算法案例

    利用mysql實(shí)現(xiàn)的雪花算法案例

    這篇文章主要介紹了利用mysql實(shí)現(xiàn)的雪花算法案例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Java創(chuàng)建線程的七種方法總結(jié)(全網(wǎng)最全面)

    Java創(chuàng)建線程的七種方法總結(jié)(全網(wǎng)最全面)

    線程是Java中的基本執(zhí)行單元,它允許程序在同一時(shí)間執(zhí)行多個(gè)任務(wù),下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java創(chuàng)建線程的七種方法,文中通過實(shí)例代碼將這七種方法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • Java 二叉樹遍歷特別篇之Morris遍歷

    Java 二叉樹遍歷特別篇之Morris遍歷

    二叉樹的遍歷(traversing binary tree)是指從根結(jié)點(diǎn)出發(fā),按照某種次序依次訪問二叉樹中所有的結(jié)點(diǎn),使得每個(gè)結(jié)點(diǎn)被訪問依次且僅被訪問一次。四種遍歷方式分別為:先序遍歷、中序遍歷、后序遍歷、層序遍歷
    2021-11-11
  • Spring security實(shí)現(xiàn)權(quán)限管理示例

    Spring security實(shí)現(xiàn)權(quán)限管理示例

    這篇文章主要介紹了Spring security實(shí)現(xiàn)權(quán)限管理示例,這里整理了詳細(xì)的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • maven中springboot-maven-plugin的5種打包方式

    maven中springboot-maven-plugin的5種打包方式

    本文主要介紹了maven中springboot-maven-plugin的5種打包方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Idea2022版本配置SpringBoot熱部署的教程

    Idea2022版本配置SpringBoot熱部署的教程

    這篇文章主要介紹了Idea2022版本配置SpringBoot熱部署的教程,包括添加依賴及更改IDEA設(shè)置的方法,本文圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • mybatis-plus與JPA混合的使用方式

    mybatis-plus與JPA混合的使用方式

    這篇文章主要介紹了mybatis-plus與JPA混合的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java基礎(chǔ)之TreeMap詳解

    Java基礎(chǔ)之TreeMap詳解

    這篇文章主要介紹了Java基礎(chǔ)之TreeMap詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • idea中方法、注釋、導(dǎo)入類折疊或是展開的設(shè)置方法

    idea中方法、注釋、導(dǎo)入類折疊或是展開的設(shè)置方法

    這篇文章主要介紹了idea中方法、注釋、導(dǎo)入類折疊或是展開的設(shè)置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04

最新評論

文成县| 遵义市| 临夏县| 华亭县| 喀什市| 康定县| 扶绥县| 苏尼特左旗| 始兴县| 玉田县| 自治县| 都昌县| 玉树县| 宁安市| 清新县| 沅江市| 曲松县| 定日县| 平阴县| 锦屏县| 博罗县| 中江县| 塘沽区| 家居| 突泉县| 西峡县| 镇安县| 渭源县| 龙口市| 浏阳市| 石林| 水城县| 新民市| 成安县| 东至县| 芦溪县| 华亭县| 蓬莱市| 修武县| 九江市| 莲花县|