use*_*643 10 spring asynchronous spring-mvc task
我有一个当前正常访问的Spring控制器,但我想以这样的方式更改实现:如果控制器执行的任务花费的时间超过定义的时间,例如10秒,那么控制器可以响应"你的正在处理请求消息"给调用者,但如果方法在时间内返回,则响应从控制器传递给调用方法,换句话说,我希望从Spring控制器定时异步执行.
注意:这不完全是TaskExecutor域(至少根据我的理解),因为我不想只是将执行交给TaskExecutor并立即返回.
我使用Spring 3.0和Java 1.5并且控制器没有视图,我只想将输出直接写入流,调用客户端期望.
嗯,这是该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异步支持(见下文).
| 归档时间: |
|
| 查看次数: |
2791 次 |
| 最近记录: |