如何在 scala play 框架 2.4 中定义 onStart 方法

How to define onStart method in scala play framework 2.4

如何使用 scala 在 play framework 2.4 中定义启动作业? play framework GlobalSetting 我已经:

class StartupConfigurationModule extends AbstractModule{

  override def configure(): Unit = {
    Akka.system.scheduler.schedule(Duration(0,duration.HOURS),Duration(24,duration.HOURS))(Id3Service.start())
    Akka.system.dispatcher
  }

}

您需要在应用程序的 modules.enabled 中(在 application.conf 中)进行注册。

它应该安排调用在 0 小时后启动 Id3Service,然后每 24 小时调用一次。

问题是模块没有声明对 运行 应用程序的依赖,或者更有趣的是,对启动的 actorSystem 的依赖。 Guice 可以决定在应用程序初始化之前启动它。

以下是强制依赖已初始化的 actorSystem 的一种方法(并减少依赖的足迹)

import javax.inject.{ Singleton, Inject }

import akka.actor.ActorSystem
import com.google.inject.AbstractModule

import scala.concurrent.duration._

class StartupConfigurationModule extends AbstractModule {

  override def configure(): Unit = {
    bind(classOf[Schedule]).asEagerSingleton()
  }

}

@Singleton
class Schedule @Inject() (actorSystem: ActorSystem) {
  implicit val ec = actorSystem.dispatcher
  actorSystem.scheduler.schedule(Duration(0, HOURS), Duration(24, HOURS))(Id3Service.start())
}
object Id3Service {
  def start(): Unit = println("started")
}