我里面有控制器和长期运行函数,比如:
@Controller
@RequestMapping("/deposit")
public class DepositController {
@RequestMapping
public ModelAndView getNewJob(long userId, Model model) {
//execute function that can runs a lot of time ...
longRunFunction();
return new ModelAndView("jobTasks");
}
public void longRunFunction(){
// process long run function
}
}
我的问题是:
如何执行 longRunFunction()
并将ModelAndView("jobTasks")答案返回给浏览器,而无需等待函数结束?
谢谢!
嗨,我在这里找到了很好的例子 http://krams915.blogspot.co.il/2011/01/spring-3-task-scheduling-via.html
这可以使用 Spring Framework 中的异步支持来完成,本质上是将长时间运行的任务委托给另一个服务,其方法用@Async
注释进行注释,然后该任务将由线程池执行,控制权将立即返回给调用方。
以下是更详细的参考: http://docs.spring.io/spring-framework/docs/3.2.3.RELEASE/spring-framework-reference/html/scheduling.html#scheduling-annotation-support-async
public class SampleBeanImpl implements SampleBean {
@Async
void longRunFunction() { … }
}
将@Async
添加到 longRunningMethod
的方法声明中。但是要在没有AspectJ编织的情况下完成这项工作,您需要将此方法放入其他bean中。