【发布时间】:2009-07-07 14:54:25
【问题描述】:
我正在 Grails 中创建一个 Web 应用程序,我想使用 GET 连续(每 5 分钟左右)轮询一个 REST 服务,该服务检索一系列消息(或者可能没有,这取决于),并且一旦它完成,我的应用程序应该将检索到的数据保存为一个对象并将其存储在我的数据库中。问题是我不知道应该如何实现它(使用 Quartz 的 cron 作业?)
【问题讨论】:
我正在 Grails 中创建一个 Web 应用程序,我想使用 GET 连续(每 5 分钟左右)轮询一个 REST 服务,该服务检索一系列消息(或者可能没有,这取决于),并且一旦它完成,我的应用程序应该将检索到的数据保存为一个对象并将其存储在我的数据库中。问题是我不知道应该如何实现它(使用 Quartz 的 cron 作业?)
【问题讨论】:
使用石英的 cron 作业非常容易实现。石英插件非常易于使用(只需安装它,然后“grails create-job Foo”)。在任务内部,您可以使用 cron 表达式(或许多其他方式)来使作业根据计划执行。
取决于几件事,GET 表达式也很容易编写。根据您尝试使用的服务,它可能很简单:
def result = new URL("http://google.com").text
// parse result depending on what it is
【讨论】:
使用 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 期间调用它,或者创建一个服务类,在构造函数中调用上面的方法,并有一个方法来停止线程(但如果你到了这个阶段,它真的更容易使用石英)。
【讨论】: