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

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

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

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

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

1、啟動類

添加@EnableScheduling開啟對定時任務(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í)行定時任務(wù)的類

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

@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í)行定時任務(wù)

因為有時候需要執(zhí)行的定時任務(wù)會很多,如果是串行執(zhí)行會帶來一些問題,比如一個很耗時的任務(wù)阻塞住了,一些需要短周期循環(huán)執(zhí)行的任務(wù)也會卡住,所以可以配置一個線程池來并行執(zhí)行定時任務(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、配置定時任務(wù)異步執(zhí)行

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

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

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

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

1、配置多個線程池

分別配置兩個線程池

@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、定時任務(wù)顯示指定調(diào)用線程池

因為上面在配置類里面初始化了兩個線程池,所以會有兩個線程池分別叫executor1和executor1被生成放到容器中,因為@Bean注解生成的對象默認就是和方法名相同的名字,而@Async注解是可以指定使用哪個線程池的。這樣就可以在不同的線程池中執(zhí)行不同的定時任務(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. 沒有配置自己的線程池時,會默認使用SimpleAsyncTaskExecutor。
  2. 如果項目中只配置了一個線程池,那么不需要顯示指定使用這個線程池,spring也會自動使用用戶配置的線程池,但是如果配置了多個就必須要顯示指定,否則還是會使用默認的。
  3. 如果想要指定使用哪個線程池,可以使用@Async("executor2")顯示指定。

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Java基礎(chǔ)之TreeMap詳解

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

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

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

最新評論

静宁县| 郎溪县| 兖州市| 满城县| 泰兴市| 保德县| 奇台县| 汾阳市| 社旗县| 金溪县| 蓝山县| 东台市| 元阳县| 姜堰市| 山东省| 建平县| 垦利县| 星子县| 南城县| 宝清县| 海丰县| 宁南县| 济源市| 金阳县| 太仓市| 离岛区| 马边| 尚义县| 恩施市| 韶关市| 山丹县| 益阳市| 永新县| 炎陵县| 安陆市| 繁昌县| 炉霍县| 宜都市| 金溪县| 民权县| 来宾市|