2009-07-07 44 views
4

我正在Grails中創建一個Web應用程序,並且我希望持續(每5分鐘左右)使用GET輪詢REST服務,該服務將檢索一系列消息(或可能沒有,它取決於),一旦它是donde,我的應用程序應該將檢索到的數據保存爲一個對象並將其存儲在我的數據庫中。問題是我不知道如何實現它(使用Quartz的cron作業?)連續輪詢Grails中的REST服務

回答

5

使用石英的cron作業將非常容易實現。石英插件非常易於使用(只需安裝它,然後「grails create-job Foo」)。在任務內部,您可以使用cron表達式(或許多其他方式),這可以使作業根據計劃執行。

根據一些事情,GET表達式也很容易編寫。根據不同的服務你想打,因爲它可以作爲簡單:使用石英插件

def result = new URL("http://google.com").text 
// parse result depending on what it is 
4

,使一個cron作業出它可能是前進的最好方式,特別是如果你將需要其他pollers。然而,如果你知道它曾經有過,並且你不想拉入石英(出於某種奇怪的原因),你仍然可以使用計時器任務來滾動自己的輪詢器,或者甚至使用常規線程:

Thread.start { 
    while (keepGoing) { 
     def result = new URL("http://google.com").text 
     // parse result depending on what it is 
     //perhaps def model = new YourDomainModel(result).save() 
     keepGoing = model.shouldContinue //calculate whether to keep going based on the result, or some other method call/logic 
     Thread.sleep(5*60*1000) //min*seconds_per_min*milliseconds_per_second 
    } 
} 

然後你可以在bootStrap期間調用它,或者創建一個服務類,在構造函數中調用上面的方法,並且有一個方法來停止線程(但是如果你到了這個階段,它真的更容易使用石英)。