弹簧控制器 - 分叉请求,在长时间运行函数结束之前返回值



我里面有控制器和长期运行函数,比如:

@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中。

最新更新