亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

配置基礎的定時任務

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

1、啟動類

添加@EnableScheduling開啟對定時任務的支持

@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í)行定時任務的類

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

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

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

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、配置定時任務異步執(zhí)行

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

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

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

因為有些定時任務是比較重要的,有些則是不太重要的,想把定時任務分別放到不同的線程池中,也是可以實現(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、定時任務顯示指定調(diào)用線程池

因為上面在配置類里面初始化了兩個線程池,所以會有兩個線程池分別叫executor1和executor1被生成放到容器中,因為@Bean注解生成的對象默認就是和方法名相同的名字,而@Async注解是可以指定使用哪個線程池的。這樣就可以在不同的線程池中執(zhí)行不同的定時任務了

// 間隔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")顯示指定。

總結

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

相關文章

  • 詳解Java 自動裝箱與自動拆箱

    詳解Java 自動裝箱與自動拆箱

    這篇文章主要介紹了Java 自動裝箱與自動拆箱的相關資料,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-09-09
  • 詳解Mybatis多參數(shù)傳遞入?yún)⑺姆N處理方式

    詳解Mybatis多參數(shù)傳遞入?yún)⑺姆N處理方式

    這篇文章主要介紹了詳解Mybatis多參數(shù)傳遞入?yún)⑺姆N處理方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • SpringBoot+Vue靜態(tài)資源刷新后無法訪問的問題解決方案

    SpringBoot+Vue靜態(tài)資源刷新后無法訪問的問題解決方案

    這篇文章主要介紹了SpringBoot+Vue靜態(tài)資源刷新后無法訪問的問題解決方案,文中通過代碼示例和圖文講解的非常詳細,對大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-05-05
  • springboot冪等切片的實現(xiàn)

    springboot冪等切片的實現(xiàn)

    本文主要介紹了springboot冪等切片的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • YGC前后新生代是否變大分析詳解

    YGC前后新生代是否變大分析詳解

    要解釋這個問題,我們先要弄清楚YGC的過程,parNew是新生代的gc算法,簡單來說從gc roots開始掃描對象,當掃到一個只要是屬于新生代的對象就將其挪到to space,但是老的對象還不會做釋放,直到gc完成之后再看是否釋放老的對象
    2022-01-01
  • java實現(xiàn)表格tr拖動的實例(分享)

    java實現(xiàn)表格tr拖動的實例(分享)

    下面小編就為大家分享一篇java實現(xiàn)表格tr拖動的實例。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • Java中checkbox實現(xiàn)跨頁多選的方法

    Java中checkbox實現(xiàn)跨頁多選的方法

    最近做了一個項目其中遇到這樣的需求,要實現(xiàn)checkbox跨頁多選功能,經(jīng)過小編整理,順利解決,今天小編給大家分享Java中checkbox實現(xiàn)跨頁多選的方法,需要的的朋友參考下
    2017-01-01
  • Java中HashMap和HashSet的高效使用技巧分享

    Java中HashMap和HashSet的高效使用技巧分享

    這篇文章主要為大家詳細介紹了Java中HashMap和HashSet的高效使用技巧,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • Spring HandlerInterceptor實現(xiàn)原理代碼解析

    Spring HandlerInterceptor實現(xiàn)原理代碼解析

    這篇文章主要介紹了Spring HandlerInterceptor實現(xiàn)原理代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Java中ArrayList類的用法與源碼完全解析

    Java中ArrayList類的用法與源碼完全解析

    這篇文章主要介紹了Java中ArrayList類的用法與源碼完全解析,ArrayList類通過List接口實現(xiàn),是Java中引申出的一種數(shù)據(jù)結構,需要的朋友可以參考下
    2016-05-05

最新評論