我正在使用带有 sbt-play-ebean 3.0.0 的 Play Framework 2.5.10。
我的问题
我需要在应用程序启动时为我的一个模型中的每个对象设置 Akka 演员。唯一的官方方法是注册一个启动模块。但有时调用启动模块时默认的 Ebean 服务器尚未初始化。
我丑陋的解决方案
启动模块:
public class StartupModule extends AbstractModule implements AkkaGuiceSupport {
@Override
protected void configure() {
bindActor(MainActor.class, "main-actor");
}
}
MainActor 类的构造函数:
@Inject
public MainActor(ActorSystem system) {
this.system = system;
boolean ebeanReady = false;
EbeanServer ebeanServer = null;
do {
try {
ebeanServer = Ebean.getDefaultServer();
} catch (PersistenceException e) {
Logger.error("Ebean not ready!");
}
if (ebeanServer != null) {
ebeanReady = true;
Logger.info("Ebean ready!");
Ebean.runCacheWarming();
}
} while (!ebeanReady);
for (Model model : Model.find.all()) {
foo(model);
}
}
在初始化 Ebean 服务器之前,有没有更好的方法来做到这一点而无需暴力尝试?