如何在spring hibernate中实现长时间运行的进程?

时间:2015-06-22 05:28:32

标签: java spring hibernate

因为我们知道struts拦截器执行和等待将照顾长时间运行的进程,因为没有得到超时的请求并且销毁它发送等待并且最后我希望在春天和长时间运行的进程中实现相同的响应冬眠。

2 个答案:

答案 0 :(得分:1)

我建议你使用Spring的DeferredResult。这是一个Future实现,使用http long poling技术。

http://docs.spring.io/spring-framework/docs/3.2.0.BUILD-SNAPSHOT/api/org/springframework/web/context/request/async/DeferredResult.html

所以我们说你会发出请求,服务器会返回deferredResult,然后你的请求会保持打开状态,直到内部进程(Hibernate)完成任务。超时可在构造函数中配置。

这是另一个例子http://www.javacodegeeks.com/2013/03/deferredresult-asynchronous-processing-in-spring-mvc.html

答案 1 :(得分:0)

为了在请求的整个生命周期内保持会话开放,我们将其绑定到视图。这可以通过使用Spring的OpenSessionInViewInterceptorOpenSessionInViewFilter

来完成

视图过滤器中的打开会话将确保Hibernate会话一直保持打开状态直到呈现视图。

您可以在后端使用任务队列进行长期运行的过程,例如this

工作队列(又称:任务队列)是为了避免立即执行资源密集型任务,并且必须等待它完成。而是安排任务稍后完成。任务被封装为消息并发送到队列。在后台运行的工作进程将弹出任务并最终执行作业。当您运行许多工作人员时,他们之间将共享任务。

这个概念在Web应用程序中特别有用,因为在短的HTTP请求窗口中无法处理复杂的任务。