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

dzi*_*blo 14 scala playframework playframework-2.4

我试图在应用程序启动时打印"Hello"到控制台.你能解释一下怎么做吗?

我自己尝试了什么:

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

conf/application.conf我补充说:

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

我跑的时候不会打印"你好" activator run

And*_*uba 7

您需要使用Global对象,并覆盖"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...")
  }

}
Run Code Online (Sandbox Code Playgroud)

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

更新:

正确的方法是使用依赖注入,就像问题中描述的那样.GlobalSettings可以在以后删除

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

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

"-------- APP DZIABLO已经开始--------"

可能是因为你错过了日志中的"Hello"(我从一开始就没有认出来)

在此输入图像描述

  • 我没有看到如何添加已弃用的代码段标记为此问题的解决方案.您没有看到"Hello"的原因是激活器运行启动服务器它不启动您的应用程序. (3认同)