我正在使用Play Framework 2.5.10和sbt-play-ebean 3.0.0。
我的问题
我需要在应用程序启动时为我的一个模型中的每个对象设置Akka actor。唯一正式的方法是注册启动模块。但是有时默认的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服务器初始化之前,有没有更好的方法可以在没有强力尝试的情况下执行此操作?
答案 0 :(得分:1)
我遇到了同样的问题,我通过将Ebean Dynamic Evolutions绑定到模块来解决了这个问题:
public class StartupModule extends AbstractModule implements AkkaGuiceSupport
{
@Override
protected void configure() {
bind(DynamicEvolutions.class).to(EbeanDynamicEvolutions.class).asEagerSingleton();
bindActor(MainActor.class, "main-actor");
}
}