SpringBoot-技术专区-自定义TaskExecutor线程池
2023-02-18 16:24:00 时间
1.自定义TaskExecutor
(1)要想执行异步任务,还需要线程池,默认情况下Spring会在 ioc容器 中找唯一的org.springframework.core.task.TaskExecutor,或者一个 bean
name 为"taskExecutor" 的java.util.concurrent.Executor 作为执行任务的线程池。
(2) 如果都没有的话,会创建 SimpleAsyncTaskExecutor 来处理异步方法调用.
此外如果 void 返回值的异步方法执行中出了异常,异常不会传播到调用线程,默认情况下由SimpleAsyncUncaughtExceptionHandler 来处理,
只是简单的纪录了日志。
实现 AsyncConfigurer 来自定义 Executor 和异常处理:
/** * @author mafei007 * @date 2020/3/24 21:30 */ @Configuration @EnableAsync public class AppConfig implements AsyncConfigurer { @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(7); executor.setMaxPoolSize(42); executor.setQueueCapacity(11); executor.setThreadNamePrefix("MyExecutor-"); executor.initialize(); return executor; } @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new CustomAsyncExceptionHandler(); } /** * 处理异步方法中未捕获的异常 */ class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler { @Override public void handleUncaughtException(Throwable throwable, Method method, Object... obj) { System.out.println("Exception message - " + throwable.getMessage()); System.out.println("Method name - " + method.getName()); System.out.println("Parameter values - " + Arrays.toString(obj)); // do something... sendMailToAdmin(throwable.getMessage()); } } }
其它
@Async注解支持一个String参数,来指定一个bean name,类型是 Executor 或 TaskExecutor ,表示使用 ioc 容器中指定的线程池来执行这个异步任。
public class Task { @Async("Executor-001") public void task1(Long id) { // do something... } }
相关文章
- [Memcache] memcache中add和set方法的区别
- [Redis] redis业务实践 , 这次用哈希
- [PHP] PHPMailer发信失败,用这种方式找原因
- [PHP] fastcgi_split_path_info与传递PATH_INFO
- [PHP] 设计一个可扩展的用户登陆系统
- [OAuth] OAuth2.0中的客户端模式
- [PHP] PHP5中的写时复制change on write
- [PHP] 使用PHP迭代表示二叉树的查找
- [PHP]利用PHP的引用生成树的结构
- [PHP] PHP7以上版本的引用计数不同的困惑
- [MySQL]ANALYZE TABLE 更新索引基数
- [Docker] 使用docker inspect查看宿主机与容器的共享目录
- [MySQL] 理解InnoDB并发高的原因
- [HTTP]HTTP/1.1 协议Expect: 100-continue
- [MySQL]mysql binlog回滚数据
- [PHP]PHP中申明 declare(strict_types=1)的作用
- Redis持久化: RDB&AOF
- [PHP] php作为websocket的客户端实时读取推送日志文件
- [MySQL] in 子查询出现DEPENDENT SUBQUERY问题
- [MySQL] 导入数据时防止出现乱码