@Async可以使用自定义配置方法
Executor以记录任何引发的异常。
以下代码实现了此模式。标记为的任何方法
@Async都将使用
Executormethod 的返回值
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!"); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)