Spring Controller - 分叉请求,长期运行功能结束前的返回值

时间:2013-12-24 13:30:05

标签: spring spring-mvc callback fork

我有控制器和长期运行功能,例如:

@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

找到了很好的例子

2 个答案:

答案 0 :(得分:1)

这可以在Spring Framework中使用Asynch支持来完成,本质上将长时间运行的任务委托给另一个服务,其方法用@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() { … }
}

答案 1 :(得分:0)

@Async添加到longRunningMethod的方法声明中。但是为了在没有AspectJ编织的情况下完成这项工作,您需要将此方法放在另一个bean中。