我尝试从Play 2.3迁移到2.5但是我在更换GlobalSettings.OnStart方法时遇到了问题。 在扩展GlobalSettings的旧Global类中,在onStartMethod中,我正在初始化Global Config并从DB中读取基本内容。 我创建了一个新类,我将代码从onStart方法移动到文档中提到的这个构造函数。
https://www.playframework.com/documentation/2.5.x/GlobalSettings https://www.playframework.com/documentation/2.4.x/PluginsToModules
我正在从AbstractModule中执行eagerSingleton的绑定。该类已正确启动,但我一直收到错误:
GlobalBootstrapModule.configure:20 - Binding
OnStartConfig.:35 - Global ... on start
引起:java.lang.RuntimeException:没有绑定到此线程的EntityManager。尝试在JPAApi.withTransaction中包装此调用,或确保在此线程上设置HTTP上下文。
这是我的代码:
替换onStart的新类
public class OnStartConfig implements StartConfigInterface{
private final JPAApi jpaApi;
@Inject
public OnStartConfig(Application application, JPAApi jpa){
this.jpaApi = jpa;
Logger.debug("Global...on start");
jpaApi.withTransaction( ()-> {
GlobalConfiguration.aggregationCriteria = AggregationCriterion.getAll();
});
}
我扩展的界面只是一个空的占位符。
用于绑定的AbstractModule:
public class GlobalBootstrapModule extends AbstractModule {
@Override
protected void configure() {
Logger.debug("Binding");
bind(StartConfigInterface.class).to(OnStartConfig.class).asEagerSingleton();
}
}
我在application.conf文件中启用了该模块:
play {
modules {
enabled += modules.GlobalBootstrapModule
}
}
我认为问题是由于缺少HttpContext。我在哪里可以从初始化期间获取它? 任何帮助都将非常感激