Как реализовать запланированное задание на определенную дату в Play 2.0?

Где поддержка заданий в Play 2.0?

Я прочитал эту ветку и нашел способ реализовать запланированные задания через определенные интервалы с использованием Global и Akka.

Но до сих пор понятия не имею о запланированном задании на определенную дату, например, задание, выполняемое один раз в день в полночь.

Play 2.0 не поддерживает? Если нет, то как лучше?


person tototoshi    schedule 27.03.2012    source источник


Ответы (2)


Вы можете использовать библиотеку Quartz с CronTrigger для выполнения Работа на определенную дату/время. Взгляните на их руководство. Вот пример с простым планировщиком:

import java.util.Date

import org.quartz.JobBuilder.newJob
import org.quartz.SimpleScheduleBuilder.simpleSchedule
import org.quartz.TriggerBuilder.newTrigger
import org.quartz.impl.StdSchedulerFactory
import org.quartz.Job
import org.quartz.JobExecutionContext

import play.api.Application
import play.api.GlobalSettings
import play.api.Logger

object Global extends GlobalSettings {

  val scheduler = StdSchedulerFactory.getDefaultScheduler();

  override def onStart(app: Application) {
    Logger.info("Quarz scheduler starting...")

    scheduler.start();

    // define the job and tie it to our HelloJob class
    val job = newJob(classOf[MyWorker]).withIdentity("job1", "group1").build();

    // Trigger the job to run now, and then repeat every 10 seconds
    val trigger = newTrigger()
      .withIdentity("trigger1", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
        .withIntervalInSeconds(10)
        .repeatForever())
      .build();

    // Tell quartz to schedule the job using our trigger
    scheduler.scheduleJob(job, trigger);

  }

  override def onStop(app: Application) {
    Logger.info("Quartz scheduler shutdown.")
    scheduler.shutdown();
  }

}

class MyWorker extends Job {
  def execute(ctxt: JobExecutionContext) {
    Logger.debug("Scheduled Job triggered at: " + new Date)
  }
}
person sunsations    schedule 11.04.2012
comment
Я подозреваю, что Quartz будет лучшим решением, чем все, что встроено в Play2. Во-первых, Quartz позволяет запускать задания в кластере через JdbcJobStore. Это упрощает развертывание заданий на кластер игровых серверов. - person John Cheng; 03.08.2012
comment
Я только что опубликовал крошечный модуль для интеграции кварца с play2: github.com/mchv/play2-quartz< /а> - person mchv; 07.01.2013

Попробуйте Deadline в Акке?

«У длительности есть родственное имя Deadline, которое представляет собой класс, содержащий представление абсолютного момента времени, и поддерживает получение длительности на основе этого путем вычисления разницы между настоящим моментом и крайним сроком».

person fxp    schedule 27.03.2012
comment
Из вашего ответа неясно, можете ли вы использовать планировщик Akka с крайним сроком, чтобы это произошло. - person dyross; 04.04.2012
comment
@dyross Play 2.0, кажется, имеет только Duration расписание, доступное по умолчанию, поэтому Deadline недоступно напрямую. - person Esko; 16.08.2012