栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Async Uncaught Exception处理程序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Async Uncaught Exception处理程序

@Async
可以使用自定义配置方法
Executor
以记录任何引发的异常。

以下代码实现了此模式。标记为的任何方法

@Async
都将使用
Executor
method 的返回值
public ExecutorgetAsyncExecutor()
。这将返回,
HandlingExecutor
它会处理所有日志记录(在这种情况下,它仅显示单词“
CAUGHT!”,但您可以将其替换为日志记录。

@Configuration@EnableAsyncpublic class ExampleConfig implements AsyncConfigurer {    @Bean    public Runnable testExec() {        return new TestExec();    }    @Override    public Executor getAsyncExecutor() {        final ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();        executor.setCorePoolSize(7);        executor.setMaxPoolSize(42);        executor.setQueueCapacity(11);        executor.setThreadNamePrefix("MyExecutor-");        executor.initialize();        return new HandlingExecutor(executor);    }}public class HandlingExecutor implements AsyncTaskExecutor {    private AsyncTaskExecutor executor;    public HandlingExecutor(AsyncTaskExecutor executor) {        this.executor = executor;    }    @Override    public void execute(Runnable task) {        executor.execute(task);    }    @Override    public void execute(Runnable task, long startTimeout) {        executor.execute(createWrappedRunnable(task), startTimeout);    }    @Override    public Future<?> submit(Runnable task) {        return executor.submit(createWrappedRunnable(task));    }    @Override    public <T> Future<T> submit(final Callable<T> task) {        return executor.submit(createCallable(task));    }    private <T> Callable<T> createCallable(final Callable<T> task) {        return new Callable<T>() { @Override public T call() throws Exception {     try {         return task.call();     } catch (Exception e) {         handle(e);         throw e;     } }        };    }    private Runnable createWrappedRunnable(final Runnable task) {        return new Runnable() { @Override public void run() {     try {         task.run();     } catch (Exception e) {         handle(e);     } }        };    }    private void handle(Exception e) {        System.out.println("CAUGHT!");    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496800.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号