Spring Async Uncaught Exception处理程序

Spring Async Uncaught Exception处理程序,第1张

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!");    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5488921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存