【发布时间】:2016-05-06 04:03:08
【问题描述】:
在基于 Scala 的 Play 应用程序中,我正在尝试启动单例服务,而不需要向控制器发出请求。我按照2.4 API documentation 中的说明创建了一个单例类,然后使用 Guice 的依赖注入库将该类绑定为 eager 单例。
即使使用急切绑定,在我通过控制器路由收到请求之前,仍然不会调用单例。关于我做错了什么有什么想法吗?
模块
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"
单例
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 在运行服务时启动,而不是等待请求到达控制器路由。
【问题讨论】:
-
你试过“sbt compile start”吗? Run 在开发过程中做了一些技巧。
-
@AlvaroCarrasco 太棒了!就是这样!您能否将其发布为官方答案,以便我将其设为“已回答”并给予您信任?
-
对于遇到此问题的任何其他人,这里有一篇讨论
run和start之间差异的帖子:stackoverflow.com/questions/18213427/…
标签: scala playframework playframework-2.0 guice