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

springboot中如何使用@Async方法

 更新時間:2024年08月05日 09:04:33   作者:sword to coding  
這篇文章主要介紹了springboot中如何使用@Async方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一.在啟動類上加上 啟動注解 @EnableAsync

二. 在需要進行異步處理的方法上加上注解@ Async

注意事項:

注解的方法 必須是public方法,因為該注解采用的是動態(tài)代理的方式

無論該方法的返回值是什么,被@Async注解的方法必定是Null

在方法內不要遞歸調用,否則無效

三.自定義異步采用的線程池

當我們沒有自定義時,springboot是怎么樣采用默認配置的?

翻譯:當spring執(zhí)行這個方法時,默認會搜索關聯(lián)的線程池定義。

上下文中唯一的 Spring 框架 TaskExecutor bean 或名為“taskExecutor”的 Executor bean。

如果這兩個都不能解析,默認會使用spring框架SimpleAsyncTaskExecutor來處理異步方法的執(zhí)行。

使用上面的步驟,可以直接使用異步注解了,但是需要注意的是,異步所需的線程池采用的是springboot框架默認的線程池,我們有時候還需要自定義線程池來限制并發(fā)線程數(shù)和最大隊列。

怎么配置異步功能的異步線程池?

法一. 實現(xiàn)配置類 AsyncConfigurer

@Configuration
@EnableAsync
public class BaseAsyncConfigurer implements AsyncConfigurer {
 
    @Override
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        //核心線程池數(shù)量,方法: 返回可用處理器的Java虛擬機的數(shù)量。
        executor.setCorePoolSize(Runtime.getRuntime().availableProcessors());
        //最大線程數(shù)量
        executor.setMaxPoolSize(Runtime.getRuntime().availableProcessors()*5);
        //線程池的隊列容量
        executor.setQueueCapacity(Runtime.getRuntime().availableProcessors()*2);
        //線程名稱的前綴
        executor.setThreadNamePrefix("this-excutor-");
        // setRejectedExecutionHandler:當pool已經(jīng)達到max size的時候,如何處理新任務
        // CallerRunsPolicy:不在新線程中執(zhí)行任務,而是由調用者所在的線程來執(zhí)行
        //executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
    /*異步任務中異常處理*/
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return (Throwable ex, Method method, Object... params)->{
            //todo 異步方法異常處理
            System.out.println("class#method: " + method.getDeclaringClass().getName() + "#" + method.getName());
            System.out.println("type        : " + ex.getClass().getName());
            System.out.println("exception   : " + ex.getMessage());
        };
    }
 
}

實現(xiàn)了這個接口過后,在使用@Async時就會自動使用我們自定義的線程池getAsyncExecutor了。

法二. 自定義一個線程池bean,在使用@Async注解時指定線程池

@Bean("threadPoolTaskExecutor")
    public TaskExecutor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(20);
        executor.setMaxPoolSize(1000);
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.setThreadNamePrefix("Async-");
        return executor;
    }

使用注解@Async(“threadPoolTaskExecutor”) ,相當于在一個項目中,不同方法上面的@Async可以使用不同的線程池

總結

一般情況下,建議手動實現(xiàn)AsyncConfigurer來自定義線程池。

如果某些方法需要使用其他的線程池,就使用bean添加一個線程池,并在@Async的value值進行指定線程池。

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

相關文章

  • Spring中的事務攔截器順序如何控制詳解

    Spring中的事務攔截器順序如何控制詳解

    這篇文章主要介紹了Spring中的事務攔截器順序如何控制詳解,那么spring事務攔截器的順序如何控制呢,若我們自己也添加了一些攔截器,此時事務攔截器和自定義攔截器共存的時候,他們的順序是怎么執(zhí)行的?如何手動來控制他們的順序,需要的朋友可以參考下
    2024-01-01
  • Java RSA加密工具類的設計與實現(xiàn)詳解

    Java RSA加密工具類的設計與實現(xiàn)詳解

    RSA算法是一種常用的非對稱加密算法,這篇文章主要為大家詳細介紹了如何通過Java編寫一個RSA加密工具類,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • Java RocketMQ 路由注冊與刪除的實現(xiàn)

    Java RocketMQ 路由注冊與刪除的實現(xiàn)

    這篇文章主要介紹了Java RocketMQ 路由注冊與刪除的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • SpringBoot集成MyBatisPlus+MySQL的實現(xiàn)

    SpringBoot集成MyBatisPlus+MySQL的實現(xiàn)

    MybatisPlus是國產的第三方插件, 它封裝了許多常用的CURDapi,免去了我們寫mapper.xml的重復勞動,本文主要介紹了SpringBoot集成MyBatisPlus+MySQL的實現(xiàn),感興趣的可以了解一下
    2023-10-10
  • java實現(xiàn)周期性執(zhí)行(定時任務)

    java實現(xiàn)周期性執(zhí)行(定時任務)

    這篇文章主要為大家詳細介紹了java實現(xiàn)周期性執(zhí)行定時任務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • 解決SpringBoot自定義攔截器和跨域配置沖突的問題

    解決SpringBoot自定義攔截器和跨域配置沖突的問題

    這篇文章主要介紹了解決SpringBoot自定義攔截器和跨域配置沖突的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行

    Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行

    這篇文章主要介紹了Java并發(fā)編程示例(一):線程的創(chuàng)建和執(zhí)行,本文是系列文章的第一篇,需要的朋友可以參考下
    2014-12-12
  • Java并發(fā)編程之關鍵字volatile的深入解析

    Java并發(fā)編程之關鍵字volatile的深入解析

    提高java的并發(fā)編程,就不得不提volatile關鍵字,不管是在面試還是實際開發(fā)中volatile都是一個應該掌握的技能,這篇文章主要給大家介紹了關于Java并發(fā)編程之關鍵字volatile的相關資料,需要的朋友可以參考下
    2021-09-09
  • Java中ArrayList和Vector的區(qū)別

    Java中ArrayList和Vector的區(qū)別

    本文主要介紹了Java中ArrayList和Vector的區(qū)別,包括線程安全性、性能、同步機制、擴容機制、遍歷方式等,具有一定的參考價值,感興趣的可以了解一下
    2024-11-11
  • Java實現(xiàn)文件的分割與合并

    Java實現(xiàn)文件的分割與合并

    這篇文章主要為大家詳細介紹了Java實現(xiàn)文件的分割與合并,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論