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

时间:2015-07-16 14:46:33

标签: playframework playframework-2.4

在Play 2.4中,覆盖ApplicationLoader中的builder方法或在Abstract模块中实现EagerBinding将取代现有的play 2.3 GlobalSettings onStart。

然而在播放2.3 onStart方法中,您的应用程序已经开始加载所有插件/依赖项。你可以在游戏2.4中做同样的事情,即在应用程序启动后运行一段代码。

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

由于

2 个答案:

答案 0 :(得分:7)

众所周知,当你在Module中急切地绑定一个类时,它会尝试尽快初始化它的一个实例。在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框架都可以确定哪些类可以按哪种顺序注入。

然后在你的模块中添加通常的绑定(这里是playframework样式而不是Guice):

bind[MyInitCodeClass] toSelf eagerly()

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

我想在playframework gitter room上给@easel提供帮助以帮助我获得该奖项。

答案 1 :(得分:0)

罗伊,并没有完全解决你的问题。

您提到使用EagerBinding时遇到问题吗?

你仍然可以使用GlobalSettings onStart,beforeStart等,如果你愿意,它只是因为希望离开Global状态而气馁。