2014-02-14 84 views
3

我有一個長時間運行的任務(> 1.5分鐘),我希望能夠通過ajax提供完成的用戶狀態。 以下是我目前在做的事情: 我使用ajax處理上傳(使用ajax上傳插件),並在任務運行時顯示忙標籤。 我想能夠顯示完成百分比(不是上傳的百分比 - 我已經提供了更新。)ie我的excel文件完成上傳後,我開始處理行,我希望能夠提供狀態更新用戶。針對長時間運行任務的Grails狀態更新

這裏就是我的研究/個人知識使我: 1.使用線程 2.使用JMS或某種消息 3.使用Grails的事件。 (不知道這將如何工作)

任何人都知道什麼是最好的方式來實現呢?

回答

2

當我已經在過去做到了這一點,我用了以下方法:

  1. Dispatch the long running process in another thread。在一些會議上的長期運行的進程更新進度範圍的組件(或DB)
  2. 返回用戶的瀏覽器頁面,並開始了一些javascript that regularly polls服務器端控制器來獲取當前進度

jQuery UI progress bar是如果你想顯示%完成,很容易使用。

+0

你知道如果異步註釋在tomcat7中可用嗎? – unekwu

+0

是的 - @Async註解是由Spring提供的,所以Tomcat版本並不真正進入它。 – rcgeorge23

+0

好的。謝謝。我會盡快嘗試,然後接受答案。 – unekwu

1

我們在我們的Grails應用程序中使用Spring Batch來完成長時間運行的任務(=批處理作業)。它是Spring產品系列的框架部分,旨在構建批處理作業。

SpringSource/GoPivotal的傢伙們在整體架構和提供的模式方面確實有很多想法。如果您的應用程序中有多個批處理作業,我會考慮查看它。

對於您的特定進度要求,Spring Batch在運行時提供了諸如JobOperatorJobExplorer的組件,可用於瞭解當前批處理作業狀態。如果你喜歡這個作爲出發點,那麼有一個單獨的SO question about monitoring progress in Spring Batch