2009-07-07 63 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期间调用它,或者创建一个服务类,在构造函数中调用上面的方法,并且有一个方法来停止线程(但是如果你到了这个阶段,它真的更容易使用石英)。