如何在Play 2.0中的特定日期实施预定作业?

tot*_*shi 9 scala akka playframework-2.0

Play 2.0中的工作支持在哪里?

我已阅读本线程,发现实施计划作业的方式间隔使用全局和阿卡.

但是仍然不知道在特定日期安排的工作,例如,每天午夜执行一次工作.

Play 2.0不支持吗?如果没有,最好的方法是什么?

sun*_*ons 10

您可以将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)
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑Quartz将是比Play2内置的更好的解决方案.首先,Quartz允许作业通过JdbcJobStore在集群中运行.这样可以更轻松地将作业部署到播放服务器群集. (2认同)

fxp*_*fxp 3

尝试 Akka 中的 Deadline 吗?

“持续时间有一个兄弟名称 Deadline,它是一个表示绝对时间点的类,并支持通过计算现在与截止日期之间的差异来得出持续时间。”