首页>代码>jHipster3.4创建Java Web应用项目最简单的入门基本教程>/kenlen1/kenlen/src/main/java/com/emodak/kenlen/async/ExceptionHandlingAsyncTaskExecutor.java
package com.emodak.kenlen.async;

import java.util.concurrent.Callable;
import java.util.concurrent.Future;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.task.AsyncTaskExecutor;

public class ExceptionHandlingAsyncTaskExecutor implements AsyncTaskExecutor,
    InitializingBean, DisposableBean {

    private final Logger log = LoggerFactory.getLogger(ExceptionHandlingAsyncTaskExecutor.class);

    private final AsyncTaskExecutor executor;

    public ExceptionHandlingAsyncTaskExecutor(AsyncTaskExecutor executor) {
        this.executor = executor;
    }

    @Override
    public void execute(Runnable task) {
        executor.execute(createWrappedRunnable(task));
    }

    @Override
    public void execute(Runnable task, long startTimeout) {
        executor.execute(createWrappedRunnable(task), startTimeout);
    }

    private <T> Callable<T> createCallable(final Callable<T> task) {
        return () -> {
            try {
                return task.call();
            } catch (Exception e) {
                handle(e);
                throw e;
            }
        };
    }

    private Runnable createWrappedRunnable(final Runnable task) {
        return () -> {
            try {
                task.run();
            } catch (Exception e) {
                handle(e);
            }
        };
    }

    protected void handle(Exception e) {
        log.error("Caught async exception", e);
    }

    @Override
    public Future<?> submit(Runnable task) {
        return executor.submit(createWrappedRunnable(task));
    }

    @Override
    public <T> Future<T> submit(Callable<T> task) {
        return executor.submit(createCallable(task));
    }

    @Override
    public void destroy() throws Exception {
        if (executor instanceof DisposableBean) {
            DisposableBean bean = (DisposableBean) executor;
            bean.destroy();
        }
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        if (executor instanceof InitializingBean) {
            InitializingBean bean = (InitializingBean) executor;
            bean.afterPropertiesSet();
        }
    }
}
最近下载更多
linom199144  LV2 2021年7月5日
jupiterup  LV3 2017年5月15日
FunnyKing  LV19 2017年4月12日
china_0221  LV41 2017年3月19日
china_0221  LV41 2017年3月19日
ddman9009  LV25 2016年7月13日
wangshanhe  LV2 2016年6月15日
最代码官方  LV168 2016年6月12日
最近浏览更多
15719908287  LV9 6月19日
不嘻嘻  LV8 2023年3月31日
why2015  LV21 2022年12月9日
敞开裤裆任雷劈  LV2 2022年1月28日
2021年12月3日
暂无贡献等级
Trickster  LV9 2021年10月19日
linom199144  LV2 2021年7月5日
xiaobaixiaobai 2021年2月22日
暂无贡献等级
骑着鱼儿过海的猫  LV1 2020年11月25日
Coincidance  LV8 2020年11月23日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友