Я создаю веб-приложение в Grails, и я хотел бы постоянно (каждые 5 минут или около того) опросить службу REST с помощью GET, которая извлекает серию сообщений (или, возможно, их нет). зависит), и как только это будет donde, мое приложение должно сохранить извлеченные данные в качестве объекта и сохранить его в моей базе данных. Проблема в том, что я понятия не имею, как я должен ее реализовывать (с помощью задания cron с использованием Quartz?)Непрерывный опрос службы REST в Grails
ответ
Работу cron с использованием кварца было бы очень легко реализовать. Плагин кварца очень прост в использовании (просто установите его, а затем «grails create-job Foo»). Внутри задачи вы можете использовать выражение cron (или несколько других способов), которое приведет к выполнению задания в зависимости от расписания.
В зависимости от нескольких вещей выражение GET также очень легко писать. В зависимости от службы вы пытаетесь ударить это может быть столь же легко, как:
def result = new URL("http://google.com").text
// parse result depending on what it is
с помощью плагина Quartz и сделать хрон из него, вероятно, лучший путь вперед, особенно если вы будете нуждаться другие участники.
Однако, если вы знаете его некогда прочь, и вы не хотите, чтобы тянуть в кварце (по какой-то причине), вы можете свернуть свой собственный Poller с помощью задачи таймера, или даже использовать заводной тему:
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
}
}
После этого вы можете вызвать это во время загрузки или создать класс обслуживания, вызывать это внутри конструктора и иметь способ остановить поток (но если вы дойдете до этого этапа, его просто проще использовать кварц).