如何在Play框架启动时执行操作?

时间:2018-01-12 14:57:04

标签: scala playframework

我有这个应用程序使用Play框架和Scala,我希望有一个服务,在我的应用程序启动时执行一个方法。我正在做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")没有打印....

1 个答案:

答案 0 :(得分:0)

您无法在播放应用程序中使用println,您需要设置Logger。所以:

val log = play.api.Logger(getClass)
log.info("This happened")

然后您可以使用logback文件配置日志文件: 以下是有关如何配置它的一些详细信息: https://www.playframework.com/documentation/2.6.x/SettingsLogger