在Grails中连续轮询REST服务

时间:2009-07-07 14:54:26

标签: rest grails

我正在Grails中创建一个Web应用程序,我想连续(每5分钟左右)使用GET轮询一个REST服务,GET会检索一系列消息(或者可能没有,取决于它),一旦它被删除,我的应用程序应将检索到的数据保存为对象并将其存储在我的数据库中。问题是我不知道应该如何实现它(使用Quartz的cron作业?)

2 个答案:

答案 0 :(得分:5)

使用quartz的cron工作非常容易实现。石英插件非常易于使用(只需安装它然后“grails create-job Foo”)。在任务内部,您可以使用cron表达式(或许多其他方式),这将导致作业根据计划执行。

根据一些事情,GET表达式也很容易编写。根据您尝试使用的服务,它可以像以下一样简单:

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

答案 1 :(得分:4)

使用Quartz插件并从中创建一个cron作业可能是最好的方法,特别是如果你需要其他的轮询器。

然而,如果你知道它一次性,并且你不想拉入石英(出于某些奇怪的原因),你仍然可以使用计时器任务滚动自己的轮询器,或者甚至使用groovy线程:

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