如何在不需要Play中的控制器请求的情况下初始化热切的单例?

时间:2016-01-28 16:48:34

标签: scala playframework playframework-2.0 guice

在基于Scala的Play应用程序中,我正在尝试启动单件服务,而无需向控制器发出请求。我按照2.4 API documentation中的指示创建了一个单例类,然后使用Guice的依赖注入库将该类绑定为渴望单例。

即使有急切的绑定,在我通过控制器路由收到请求之后,单身仍然不会被调用。关于我做错了什么的想法?

模块

package models

import com.google.inject.AbstractModule
import com.google.inject.name.Names

class MessageLogModule extends AbstractModule {
  def configure() = {
    bind(classOf[MessageLogService]).asEagerSingleton
  }
}

配置

play.modules.enabled += "models.MessageLogModule"

的Singleton

package models

import javax.inject._

@Singleton
class MessageLogService {
  // Create a file to test
  println("IN SINGLETON - CREATING NEW FILE")
  val file = new java.io.File("howdy.txt")
  file.createNewFile
}

运行命令

sbt compile run

在我发出......

之前,不会调用上面的单例
curl http://localhost:9000/

我想要的是MessageLogService在运行服务时启动而不是等待命令到达控制器路由。

1 个答案:

答案 0 :(得分:8)

你想要的是:sbt compile start

run延迟编译和初始化,直到第一次请求允许更快更新 - 刷新 - 看 - 更改开发周期。

相关问题