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

Jor*_*mer 7 scala guice playframework playframework-2.0

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

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

package models

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

class MessageLogModule extends AbstractModule {
  def configure() = {
    bind(classOf[MessageLogService]).asEagerSingleton
  }
}
Run Code Online (Sandbox Code Playgroud)

组态

play.modules.enabled += "models.MessageLogModule"
Run Code Online (Sandbox Code Playgroud)

独生子

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

运行命令

sbt compile run
Run Code Online (Sandbox Code Playgroud)

在我发出一个......之前,上面的单例不会被调用

curl http://localhost:9000/
Run Code Online (Sandbox Code Playgroud)

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

Alv*_*sco 8

你想要的是: sbt compile start

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