Java Spring ThreadPoolTaskExecutor配置?

Java Spring ThreadPoolTaskExecutor配置?,java,spring,spring-mvc,java-ee-6,quartz-scheduler,Java,Spring,Spring Mvc,Java Ee 6,Quartz Scheduler,我正在使用Spring2.5ThreadPoolTaskExecutor,如下所示 <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize" value="5" /> <property name="maxPoolSize" value="10"

我正在使用Spring2.5
ThreadPoolTaskExecutor
,如下所示

<bean id="taskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="5" />
    <property name="maxPoolSize" value="10" />
    <property name="WaitForTasksToCompleteOnShutdown" value="true" />
</bean>
以上代码工作正常,没有任何问题。我的问题是,
ThreadPoolTaskExecutor
是异步的,这意味着它不会等到任务完成。它只是开火然后忘记。如果任何执行调用抛出任何异常,我需要捕获它并发送电子邮件

为了做到这一点,我如何让流程等到taskExecutor的execute方法完成后才知道它是否抛出任何异常

另外,在我的配置中,
waitfortaskstocompleteonshutton
是什么

我什么时候可以调用
taskExecutor.shutdown()?请帮帮我

谢谢

您可以调用submit()而不是execute(),然后返回一个Future,它会告诉您是否有错误;这样做的缺点是必须进行阻塞调用才能找到错误

更好(或至少更异步)的解决方案是在PrintTask中处理错误:

@Override
public void run() {
    try {
        doPrintTaskStuff();
    } catch (Throwable t) {
        sendEmailAboutException(t);
    }
} 

谢谢你的回复。Future and submit()在spring 2.5中可用吗?嗯,实际上看起来不是。是否有任何原因使您不能使用最新的Spring版本(撰写本文时为3.2.4)?好的,那么可以尝试我提到的解决方案,处理任务本身中的错误情况taskExecutor.shutdown()是什么意思;你在这儿干什么?是否要等到所有线程完成该进程?调用shutdown()后,您将无法添加更多任务。如果您首先调用setWaitForTaskStoCompleteShutton(true)(您已经在XML配置中完成了此操作),那么它将等待所有线程完成。它不会给你任何关于这些任务是成功还是失败的信息,所以你仍然需要自己处理。
@Override
public void run() {
    try {
        doPrintTaskStuff();
    } catch (Throwable t) {
        sendEmailAboutException(t);
    }
}