资讯专栏INFORMATION COLUMN

聊聊TaskExecutor的spring托管

bovenson / 1143人阅读

摘要:序本文主要简述下如何设置的。实例使用托管的好处就是可以在容器启动或销毁的时候做些准备或清理动作。分别可以用及来指定。默认寻找的命名为或者的无参方法,这里没有配置,默认调用的是的方法。

本文主要简述下如何设置TaskExecutor的Thread.UncaughtExceptionHandler。

实例
    @Bean
    protected ThreadPoolTaskScheduler taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(10);
        executor.setMaxPoolSize(50);
        executor.setQueueCapacity(100);
        executor.setThreadNamePrefix("demo-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.setWaitForTasksToCompleteOnShutdown(true);
        executor.initialize();
        return executor;
    }

使用spring托管TaskExecutor的好处就是可以在spring容器启动或销毁的时候做些准备或清理动作。分别可以用initMethod及destroyMethod来指定。
destroyMethod默认寻找public的命名为close或者shutdown的无参方法,这里没有配置,默认调用的是ThreadPoolTaskScheduler的shutdown方法。

配置Thread.UncaughtExceptionHandler

spring默认会给async的线程池配SimpleAsyncUncaughtExceptionHandler,具体见spring-context-4.3.9.RELEASE-sources.jar!/org/springframework/scheduling/annotation/AsyncAnnotationAdvisor.java

不过自己配置的taskExecutor就没有这个福利了,需要自己配置,如下:

        final Thread.UncaughtExceptionHandler uncaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
            //do what you want
            }
        };
        ThreadFactoryBuilder threadFactoryBuilder = new ThreadFactoryBuilder();
        threadFactoryBuilder.setNameFormat("demo-%d");
        threadFactoryBuilder.setUncaughtExceptionHandler(uncaughtExceptionHandler);
        executor.setThreadFactory(threadFactoryBuilder.build());

这样就大功告成了

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67917.html

相关文章

  • 聊聊springasync注解

    摘要:序本文主要聊聊中的注解。这里从获取注解有个可以标注使用哪个,这里的就是寻找这个标识。推荐注解指定,然后的返回,让它去寻找默认的自己应用里头都默认定义一个给托管 序 本文主要聊聊spring中的async注解。 AsyncConfigurer @EnableAsync(proxyTargetClass = true) @Configuration public class AsyncCo...

    Steve_Wang_ 评论0 收藏0
  • Spring - Asynchronous Request

    摘要:注意这时中结果为,即将原来的替换成,所以直接返回线程池执行的结果。提醒中的是你业务代码执行的步骤。所以异步异常处理和同步相同,在这段请求中处理。比多,调用时间即发起之前。正是请求被异步化,从而使得能,即。 用法 @GetMapping(/ddd) public Callable process() { return () -> { Thread.sleep(...

    everfight 评论0 收藏0
  • Spring定时任务@scheduled多线程使用(@Async注解)

    摘要:下面我们稍稍改下代码来证实一下这次我让任务执行的时间等于,大于条线程总间隔时间来耗尽线程池中的线程。 1.开篇 在Spring定时任务@Scheduled注解使用方式浅窥这篇文章里面提及过,spring的定时任务默认是单线程的,他在某些场景下会造成堵塞,那么如果我们想让每一个任务都起一条线程去执行呢? 2.使用@Async 我们可以使用Spring的@Async注解十分容易的实现多线程...

    klivitamJ 评论0 收藏0
  • Flink 在有赞实时计算实践

    摘要:第三个就是比较重点的内容,在有赞的实践。第四部分是将实时计算化,界面化的一些实践。二有赞实时平台架构有赞的实时平台架构呢有几个主要的组成部分。实时平台提供了集群管理,项目管理,任务管理和报警监控的功能。。 一、前言 这篇主要由五个部分来组成: 首先是有赞的实时平台架构。 其次是在调研阶段我们为什么选择了 Flink。在这个部分,主要是 Flink 与 Spark 的 structure...

    琛h。 评论0 收藏0
  • Flink 在有赞实时计算实践

    摘要:第三个就是比较重点的内容,在有赞的实践。第四部分是将实时计算化,界面化的一些实践。二有赞实时平台架构有赞的实时平台架构呢有几个主要的组成部分。实时平台提供了集群管理,项目管理,任务管理和报警监控的功能。。 一、前言 这篇主要由五个部分来组成: 首先是有赞的实时平台架构。 其次是在调研阶段我们为什么选择了 Flink。在这个部分,主要是 Flink 与 Spark 的 structure...

    fish 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<