计算Spring中控制器/方法的执行时间

use*_*643 10 spring asynchronous spring-mvc task

我有一个当前正常访问的Spring控制器,但我想以这样的方式更改实现:如果控制器执行的任务花费的时间超过定义的时间,例如10秒,那么控制器可以响应"你的正在处理请求消息"给调用者,但如果方法在时间内返回,则响应从控制器传递给调用方法,换句话说,我希望从Spring控制器定时异步执行.

注意:这不完全是TaskExecutor域(至少根据我的理解),因为我不想只是将执行交给TaskExecutor并立即返回.

我使用Spring 3.0和Java 1.5并且控制器没有视图,我只想将输出直接写入流,调用客户端期望.

Tom*_*icz 6

嗯,这TaskExecutor领域.在您的控制器中,只需将处理逻辑包装好Callable,将其提交给AsyncTaskExecutor并等待最多10秒钟.而已!

final Future<ModelAndView> future = asyncTaskExecutor.submit(new Callable<ModelAndView>() {
    @Override
    public ModelAndView call() throws Exception {
        //lengthy computations...
        return new ModelAndView("done");
    }
});
try {
    return future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException e) {
    return new ModelAndView("timeout");
}
Run Code Online (Sandbox Code Playgroud)

当然这有点讨厌,特别是当它在一个控制器中出现不止一次时.如果是这种情况,您应该看看servlet 3.0异步支持(见下文).

进一步阅读: