文章目录

  • 1. 启动类添加@EnableAsync注解
  • 2. 异步方法添加@Async注解
  • 3. 自定义线程池以及线程池异常策略
1. 启动类添加@EnableAsync注解
package com.gblfy;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;@EnableAsync
@SpringBootApplication
public class JavaEscapeApplication {public static void main(String[] args) {SpringApplication.run(JavaEscapeApplication.class, args);}}
2. 异步方法添加@Async注解
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;import java.util.concurrent.Future;@Slf4j
@Service
public class AsyncService {@Asyncpublic void asyncProcess01() throws Exception {log.info("AsyncService Start to asyncProcess01 ->{}", Thread.currentThread().getName());Thread.sleep(2000);log.info("AsyncService Start to asyncProcess01 ->{}", Thread.currentThread().getName());}@Asyncpublic Future<String> asyncProcess02() throws Exception {log.info("AsyncService Start to asyncProcess02->{}", Thread.currentThread().getName());Thread.sleep(2000);log.info("AsyncService Done to asyncProcess02->{}", Thread.currentThread().getName());return new AsyncResult<>("imooc");}@Asyncpublic void asyncProcess03()  {log.info("AsyncService Start to asyncProcess03->{}", Thread.currentThread().getName());throw new RuntimeException("throw exception asyncProcess03");}
}
3. 自定义线程池以及线程池异常策略
package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;/*** 自定义异步任务线程池*/
@Slf4j
@Configuration
public class AsyncTaskConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("cmiip-");executor.setCorePoolSize(15);executor.setMaxPoolSize(20);executor.setKeepAliveSeconds(5);executor.setQueueCapacity(100);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());executor.setWaitForTasksToCompleteOnShutdown(true);executor.setAwaitTerminationSeconds(60);executor.initialize();return executor;}@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new AsyncUncaughtExceptionHandler() {@Overridepublic void handleUncaughtException(Throwable ex, Method method, Object... params) {//                报警邮件,发短信等等log.error("async task some Error: {} ,{} , {}", ex.getMessage(),method.getDeclaringClass().getName() + "." + method.getName(),Arrays.toString(params));}};}
}

测试

package com.gblfy.async_task;import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;@Slf4j
@SpringBootTest
class AsyncServiceTest {@Autowiredprivate AsyncService asyncService;@Testvoid contextLoads() throws Exception {//        asyncService.asyncProcess01();Future<String> future= asyncService.asyncProcess02();log.info("Async Process02 return :->{}", future.get(1, TimeUnit.SECONDS));}@Testvoid contextLoads2() throws Exception {asyncService.asyncProcess03();Thread.sleep(3000);}
}

Springboot异步任务线程池相关推荐

  1. python线程池原理_Django异步任务线程池实现原理

    这篇文章主要介绍了Django异步任务线程池实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 当数据库数据量很大时(百万级),许多批量数据修改 ...

  2. SpringBoot - 使用ExecutorService线程池执行异步任务教程(以Runnable任务为例)

    有时我们的系统需要进行一些比较耗时的操作,比如用户注册后要调用邮件服务器给用户发送个邮件,又比如上传一个大数据量的 excel 并导入到数据库.如果后端的这些工作比较耗时,那么前台的页面便会一直处于等 ...

  3. Springboot应用中线程池配置教程(2021版)

    前言:日常开发中我们常用ThreadPoolExecutor提供的线程池服务帮我们管理线程,在Springboot中更是提供了@Async注解来简化业务逻辑提交到线程池中执行的过程.由于Springb ...

  4. SpringBoot中的线程池,你真的会用么?

    点击关注公众号,Java干货及时送达 来源:blog.csdn.net/m0_37701381/article/details/81072774 前言 前两天做项目的时候,想提高一下插入表的性能优化, ...

  5. JDK 伪异步编程(线程池)

    伪异步IO编程 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接.在高性能服务器应用领域,往往需要面向成千上万个客户 ...

  6. java 任务池_多线程的应用-异步任务线程池的简单实现

    对于服务端的应用而言,经常会出现比如定时任务,或者任务的异步执行,熟悉Java开发的开发者,经常会使用Executors类,其提供了4种不同的线程池: ​newCachedThreadPool, ne ...

  7. springboot中的线程池

    1.springboot线程池定时任务类org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler 参考springboot线程 ...

  8. 微服务入门(四)异步与线程池、MD5、RabbitMQ

    创建线程的方式 初始化线程的 4 种方式 1) . 继承 Thread 2) . 实现 Runnable 接口 3) . 实现 Callable 接口 + FutureTask (可以拿到返回结果, ...

  9. springboot链接MySQL线程池_SpringBoot中的数据库连接池

    内置的连接池 目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池. 数据库连接可以使用DataSource池进行自动配置. 由于Tomcat数 ...

最新文章

  1. Python之父发文,将重构现有核心解析器
  2. VTK:几何对象之OpenVROrientedArrow
  3. python win32转pdf 横版_使用Python3将word文档和pdf电子书进行格式互转(兼容Windows/Linux)...
  4. android 5.0 新功能,Android 5.0新特性有哪些?安卓5.0新功能汇总
  5. 从未在一起更让人遗憾_二十不惑强行悲伤结尾,我们本可以在一起,才最让人遗憾...
  6. golang 切片 接口_如何理解Golang中的接口?
  7. $(document).ready(function(){});不执行
  8. CTSC2017酱油记
  9. 【20180712】Nginx 参数优化和内核参数优化
  10. mysql事件【定时器】
  11. OpenCV-图像处理(27、模板匹配(Template Match))
  12. java会员消费管理系统源码_基于jsp的会员消费商场vip管理系统-JavaEE实现会员消费商场vip管理系统 - java项目源码...
  13. IP协议详解之头部结构
  14. js实现oss批量下载文件_jquery批量下载文件
  15. 论文投稿指南——中文核心期刊推荐(水利工程)
  16. Cocos Creator | 通过 effect 实现卷轴展开和收拢效果
  17. 【Window10】解决win10家庭中文版找不到组策略gpedit.msc修改不了C盘文件
  18. 杂谈:python和药物研发
  19. tcpdump显示udp包_TCPDUMP 抓包 , 怎么查看 抓的包的内容呢?
  20. 专注java分布式架构之Zeppelin不是飞艇

热门文章

  1. 诗人也出数学题,出的有趣又深刻
  2. 解决虚拟机打开不了?提示VMware Workstation cannot connect to the virtual machine的问题
  3. 基于Confluent+Flink的实时数据分析最佳实践
  4. MySQL深潜|剖析Performance Schema内存管理
  5. 淘宝端智能演进和思考
  6. 极测未来|淘宝千人千面内容下的智能评测技术与实践
  7. 原理解析 | 深入了解 Apache Flink 的网络协议栈
  8. 开启数据科学职业生涯的8个基本技巧
  9. 解码2017双11:全球狂欢新记录背后的阿里云存储
  10. 2021信服云创新峰会:托管云成上云第三种选择