SpringBoot的@EnableAsync和@Async注解分析
前言
使用多線(xiàn)程,往往是創(chuàng)建Thread,或者是實(shí)現(xiàn)Runnable接口,用到線(xiàn)程池得時(shí)候需要?jiǎng)?chuàng)建Executors,通過(guò)使用@EnableAsync注解就可以使用多線(xiàn)程,@Async注解加在線(xiàn)程任務(wù)的方法上 可以異步執(zhí)行任務(wù)。使用 ThreadPoolTaskExecutor 就可以使用線(xiàn)程池。
定義配置類(lèi)
這個(gè)配置類(lèi)需要實(shí)現(xiàn)AsyncConfigurer接口,并實(shí)現(xiàn)他的方法
- 異步線(xiàn)程的提供者,在里面配置自動(dòng)執(zhí)行的東西,如線(xiàn)程池參數(shù)。
- 線(xiàn)程異常的處理。
@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());
};
}
}線(xiàn)程池配置類(lèi)
@Data
@Component
@ConfigurationProperties(prefix = "task.pool")
public class ThreadPoolParamsConfig {
/**
* 核心線(xiàn)程數(shù)
*/
private int corePoolSize;
/**
* 最大線(xiàn)程數(shù)
*/
private int maxPoolSize;
/**
* 線(xiàn)程空閑空間
*/
private int keepAliveSeconds;
/**
* 任務(wù)隊(duì)列容量
*/
private int queueCapacity;
}調(diào)用異步線(xiàn)程任務(wù)
/**
* 測(cè)試異步創(chuàng)建任務(wù)
* @return
*/
public Result createIsueTask() {
inspPlanRlnToolService.asynsBatchCreateIsueTasks();
return Result.ok();
}線(xiàn)程任務(wù)類(lèi)
/**
* 異步創(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)文章
Java快速實(shí)現(xiàn)圖書(shū)管理基本功能
隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書(shū)館的日常工作進(jìn)行管理勢(shì)在必行,本篇文章涵蓋一個(gè)圖書(shū)管理系統(tǒng)的基本功能實(shí)現(xiàn)代碼,大家可以查缺補(bǔ)漏,提升水平2022-05-05
實(shí)例講解分布式緩存軟件Memcached的Java客戶(hù)端使用
這篇文章主要介紹了分布式緩存軟件Memcached的Java客戶(hù)端使用,Memcached在GitHub上開(kāi)源,作者用其Windows平臺(tái)下的版本進(jìn)行演示,需要的朋友可以參考下2016-01-01
springBoot Junit測(cè)試用例出現(xiàn)@Autowired不生效的解決
這篇文章主要介紹了springBoot Junit測(cè)試用例出現(xiàn)@Autowired不生效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java中BigDecimal類(lèi)的add()的使用詳解
這篇文章主要介紹了Java中BigDecimal類(lèi)的add()的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
鎖超時(shí)發(fā)現(xiàn)parallelStream并行流線(xiàn)程上下文坑解決
這篇文章主要為大家介紹了鎖超時(shí)發(fā)現(xiàn)parallelStream并行流線(xiàn)程上下文坑解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
解決java 查看JDK中底層源碼的實(shí)現(xiàn)方法
本篇文章是對(duì)在java中查看JDK中底層源碼的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
識(shí)別率很高的java文字識(shí)別技術(shù)
這篇文章主要為大家詳細(xì)介紹了識(shí)別率很高的java文字識(shí)別技術(shù),親測(cè),希望對(duì)大家有幫助,感興趣的小伙伴們可以參考一下2016-08-08
Springboot測(cè)試類(lèi)沒(méi)有bean注入問(wèn)題解析
這篇文章主要介紹了Springboot測(cè)試類(lèi)沒(méi)有bean注入問(wèn)題解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

