如何在Play中启动时运行代码!框架2.4

时间:2015-09-15 10:02:07

标签: scala playframework playframework-2.4

我正在尝试打印"你好"在应用程序启动时控制台。你能解释一下怎么做吗?

我自己尝试了什么:

app/modules/HelloModule.scala

package modules

import com.google.inject.AbstractModule

trait Hello {}

class MyHelloClass extends Hello {
  initialize() // running initialization in constructor
  def initialize() = {
    println("Hello")
  }
}

class HelloModule extends AbstractModule {
  def configure() = {
    bind(classOf[Hello])
      .to(classOf[MyHelloClass]).asEagerSingleton
  }
}

conf/application.conf中我添加了:

play.modules.enabled += "modules.HelloModule"

和"你好"我运行activator run

时不会打印

1 个答案:

答案 0 :(得分:7)

您需要使用Global object,并覆盖“onStart”方法:

  

在项目中定义Global对象允许您处理全局对象   您的应用程序的设置。必须在中定义此对象   默认(空)包,必须扩展GlobalSettings。

import play.api._

object Global extends GlobalSettings {

  override def onStart(app: Application) {
    Logger.info("Application has started")
  }

  override def onStop(app: Application) {
    Logger.info("Application shutdown...")
  }

}
  

您还可以指定自定义GlobalSettings实现类名称   使用application.global配置密钥。

<强>更新

正确的方法是使用依赖注入,就像问题中描述的那样。 GlobalSettings could be removed later

问题中的代码没有问题。我在本地设置上验证了它。在开发模式“激活器运行”中的第一个请求之后以及在生产模式“激活器启动”中应用程序启动之后,代码写入“Hello”。

顺便说一下,尝试在日志中使用一些更容易找到的字符串,比如

“-------- APP DZIABLO已经开始--------”

可能是因为你在日志中错过了“你好”(我从一开始就没有认出来)

enter image description here