【发布时间】:2018-02-01 13:38:08
【问题描述】:
我有这个应用程序使用带有 Scala 的 Play 框架,我希望有一个服务在我的应用程序启动时执行一个方法。我正在做How do I perform an action on server startup in the Scala Play Framework? 所说的一切。我的 Play 版本是 2.6,我没有为此使用 GlobalSettings。
package bootstrap
import com.google.inject.AbstractModule
class EagerLoaderModule extends AbstractModule {
override def configure() = {
println("EagerLoaderModule.configure")
bind(classOf[InitSparkContext]).to(classOf[InitSparkContextImpl]).asEagerSingleton()
}
}
在application.conf 上,我添加了play.modules.enabled += "bootstrap.EagerLoaderModule" 行。下面是我要启动 Spark 上下文的服务。
package bootstrap
import javax.inject.{Inject, Singleton}
import play.api.inject.ApplicationLifecycle
import scala.concurrent.Future
trait InitSparkContext {
def init(): Unit
def stop(): Unit
}
@Singleton
class InitSparkContextImpl @Inject()(appLifecycle: ApplicationLifecycle) extends InitSparkContext {
override def init(): Unit = println("InitSparkContext.start")
override def stop(): Unit = println("InitSparkContext.stop")
appLifecycle.addStopHook { () =>
stop()
Future.successful(())
}
init()
}
控制台上没有打印任何内容,甚至没有打印println("EagerLoaderModule.configure")....
【问题讨论】:
-
您注册新的
EagerLoaderModule了吗?见playframework.com/documentation/2.6.x/… -
您是指
play.modules.enabled += "bootstrap.EagerLoaderModule"吗?我按照问题中的解释做了...... -
我假设您正在使用
sbt run,然后向应用程序发送请求。对吗? -
是的,我在
sbt run之后发送请求。 -
我会尝试将此类注入到您的一个控制器中,以确保它可以这样工作。如果可行,请尝试检查模块是否已加载(不确定是否有日志记录,我可能只是附加一个调试器)。
标签: scala playframework