SpringBoot的@EnableAsync和@Async注解分析
前言
使用多線程,往往是創(chuàng)建Thread
,或者是實(shí)現(xiàn)Runnable
接口,用到線程池得時(shí)候需要?jiǎng)?chuàng)建Executors
,通過使用@EnableAsync
注解就可以使用多線程,@Async
注解加在線程任務(wù)的方法上 可以異步執(zhí)行任務(wù)。使用 ThreadPoolTaskExecutor
就可以使用線程池。
定義配置類
這個(gè)配置類需要實(shí)現(xiàn)AsyncConfigurer
接口,并實(shí)現(xiàn)他的方法
- 異步線程的提供者,在里面配置自動(dòng)執(zhí)行的東西,如線程池參數(shù)。
- 線程異常的處理。
@Configuration @EnableAsync public class ThreadPoolConfig implements AsyncConfigurer { private static final Logger log = LoggerFactory.getLogger(ThreadPoolConfig.class); @Autowired private ThreadPoolParamsConfig threadPoolParamsConfig; @Override @Bean("taskExecutor") public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(threadPoolParamsConfig.getCorePoolSize()); executor.setMaxPoolSize(threadPoolParamsConfig.getMaxPoolSize()); executor.setQueueCapacity(threadPoolParamsConfig.getQueueCapacity()); executor.setKeepAliveSeconds(threadPoolParamsConfig.getKeepAliveSeconds()); executor.setThreadNamePrefix("authority-manage-thread-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return (ex,method,params) -> { log.error("異常信息:{}",ex.getMessage()); log.error("exception method:{}",method.getName()); }; } }
線程池配置類
@Data @Component @ConfigurationProperties(prefix = "task.pool") public class ThreadPoolParamsConfig { /** * 核心線程數(shù) */ private int corePoolSize; /** * 最大線程數(shù) */ private int maxPoolSize; /** * 線程空閑空間 */ private int keepAliveSeconds; /** * 任務(wù)隊(duì)列容量 */ private int queueCapacity; }
調(diào)用異步線程任務(wù)
/** * 測(cè)試異步創(chuàng)建任務(wù) * @return */ public Result createIsueTask() { inspPlanRlnToolService.asynsBatchCreateIsueTasks(); return Result.ok(); }
線程任務(wù)類
/** * 異步創(chuàng)建任務(wù) */ @Async("taskExecutor") @Override public void asynsBatchCreateIsueTasks() { log.info("這是一個(gè)異步任務(wù)"); }
到此這篇關(guān)于SpringBoot的@EnableAsync和@Async注解分析的文章就介紹到這了,更多相關(guān)SpringBoot的@EnableAsync內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot接口返回?cái)?shù)據(jù)脫敏(Mybatis、Jackson)
有時(shí)候,我們接口返回的數(shù)據(jù)需要做一些處理,有一些敏感數(shù)據(jù),本文主要介紹了SpringBoot接口返回?cái)?shù)據(jù)脫敏(Mybatis、Jackson),具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07JAVA實(shí)現(xiàn)基于皮爾遜相關(guān)系數(shù)的相似度詳解
這篇文章主要介紹了JAVA實(shí)現(xiàn)基于皮爾遜相關(guān)系數(shù)的相似度詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11基于Spring定時(shí)任務(wù)的fixedRate和fixedDelay的區(qū)別
這篇文章主要介紹了基于Spring定時(shí)任務(wù)的fixedRate和fixedDelay的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例
這篇文章主要介紹了Java虛擬機(jī)類加載器之雙親委派機(jī)制模型案例,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Spring?Boot統(tǒng)一處理全局異常的實(shí)戰(zhàn)教程
最近在做項(xiàng)目時(shí)需要對(duì)異常進(jìn)行全局統(tǒng)一處理,所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot統(tǒng)一處理全局異常的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12Java 實(shí)戰(zhàn)交易平臺(tái)項(xiàng)目之寵物在線商城系統(tǒng)
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)寵物在線商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11SpringBoot JPA實(shí)現(xiàn)增刪改查、分頁(yè)、排序、事務(wù)操作等功能示例
本篇文章主要介紹了SpringBoot JPA實(shí)現(xiàn)增刪改查、分頁(yè)、排序、事務(wù)操作等功能示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Java實(shí)現(xiàn)矩陣順時(shí)針旋轉(zhuǎn)90度的示例
今天小編就為大家分享一篇Java實(shí)現(xiàn)矩陣順時(shí)針旋轉(zhuǎn)90度的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01