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

Roy*_*Lin 8 playframework playframework-2.4

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

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

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

谢谢

le-*_*ude 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

}
Run Code Online (Sandbox Code Playgroud)

这是合乎逻辑的,因为任何有价值的DI框架都可以确定哪些类可以按哪种顺序注入.

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

bind[MyInitCodeClass] toSelf eagerly()
Run Code Online (Sandbox Code Playgroud)

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

我想在playframework gitter room@easel一些信用来帮助我.


Jac*_*cko 0

罗伊,不太明白你的问题。

正如您提到的,您在使用 EagerBinding 时遇到问题吗?

如果您愿意,您仍然可以使用 GlobalSettings onStart、beforeStart 等,但由于希望摆脱全局状态,因此不鼓励这样做。