PlayFramework 2.4 在应用程序启动后运行一些代码

标签 playframework playframework-2.4

在 play 2.4 中,覆盖 ApplicationLoader 中的 builder 方法或在 Abstract 模块中实现 EagerBinding 替换了现有的 play 2.3 GlobalSettings onStart。

但是在 play 2.3 onStart 方法中,您的应用程序已经启动并加载了所有插件/依赖项。你能在 play 2.4 中做同样的事情吗,即在应用程序启动后运行一段代码。

在我的情况下,Slick 要求应用程序在访问数据库之前已经启动。

谢谢

最佳答案

众所周知,当您在 Module 中急切地绑定(bind)一个类时。它将尝试尽快初始化它的一个实例。在 play framework 2.4 中,这是您在应用程序启动之前获取运行代码的方式。

但遵循 DI 的常见预期规则:
如果,在要运行的类的构造函数中,将作为参数(也称为“依赖于”)添加到 app: Application然后它将在应用程序启动后执行;像这样:

import play.api.Application
import javax.inject.Inject

class MyInitCodeClass @Inject() (val app: Application) {

//YOUR CODE HERE

}

这是合乎逻辑的,因为任何值得一提的 DI 框架都会计算出他可以按什么顺序注入(inject)哪些类。

然后在你的模块中添加通常的绑定(bind)(这里是 playframework 风格而不是 Guice):
bind[MyInitCodeClass] toSelf eagerly()

希望这有效。停止使用 Play.current 也很有用。只需使用 Play 2.4 的新 DI 系统注入(inject)应用程序。

我想在 playframework gitter room 上向@easel 致谢帮我解决这个问题。

关于PlayFramework 2.4 在应用程序启动后运行一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31457536/

相关文章:

java - 带有 Play Framework 的 JPA 查询空值不起作用

scala - 剪影和移动应用程序

scala - 使用 I18n : two languages in the same page 播放框架 2.4.0

java - 手动调用PlayFramework自定义错误页面

scala - 使用 WS 和 ScalaTest 发送 auth cookie

java - 存储应用程序 transient 配置的推荐做法

java - 为什么 "activator start"会因 "Bad application path"而失败?

json - 覆盖 Play JSON Combinator Writes 的值

java - 关闭连接但仍然收到异常 : null. 消息:致命:角色 "me"的连接太多

playframework - SBT :ResolvedException - Unresolved dependency PlayFramework 2. 3.6