gpt4 book ai didi

java - Ebean 关闭在 Play 测试中被破坏

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:49 26 4
gpt4 key购买 nike

我们使用基础测试在 Play Server 中构建了一个测试结构,在该测试中我们清理内存数据库,然后进行改进。代码的简单快照如下:

public static void ddlConfiguration() {
String serverName = "default";
server = Ebean.getServer(serverName);
ServerConfig config = new ServerConfig();
ddl = new DdlGenerator();

// Get the database engine
String jdbc = settings.get("db.default.url");
String[] splittedUrl = jdbc.split(":");
String engine = splittedUrl[1];
if(engine.equals("h2")){
ddl.setup((SpiEbeanServer) server, new H2Platform(), config);
}else{
ddl.setup((SpiEbeanServer) server, new MySqlPlatform(), config);
}

}
@Before
public void startApp() throws IOException {
app = Helpers.fakeApplication(settings);
Helpers.start(app);

ddlConfiguration();
}
@After
public void stopApp() {
// We clean the database at the end of the test in order not to overwrite
// the onStart App initialization
cleanDb();
Helpers.stop(app);
}

问题是一旦执行了所有测试并且 Play 服务器关闭,就会抛出如下异常:

[error] c.a.e.s.c.DefaultServer - Error unregistering Ebean Ebean:server=default2
javax.management.InstanceNotFoundException: Ebean:server=default2,key=AutoFetch
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_72]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427) ~[na:1.8.0_72]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415) ~[na:1.8.0_72]
at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546) ~[na:1.8.0_72]
at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownInternal(DefaultServer.java:406) [avaje-ebeanorm.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownManaged(DefaultServer.java:379) [avaje-ebeanorm.jar:na]
[error] c.a.e.s.c.DefaultServer - Error unregistering Ebean Ebean:server=default3
javax.management.InstanceNotFoundException: Ebean:server=default3,key=AutoFetch
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1095) ~[na:1.8.0_72]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:427) ~[na:1.8.0_72]
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:415) ~[na:1.8.0_72]
at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:546) ~[na:1.8.0_72]
at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownInternal(DefaultServer.java:406) [avaje-ebeanorm.jar:na]
at com.avaje.ebeaninternal.server.core.DefaultServer.shutdownManaged(DefaultServer.java:379) [avaje-ebeanorm.jar:na]

每个错误的第一行从“[error] c.a.e.s.c.DefaultServer - 取消注册 Ebean Ebean:server=default2 时出错”到“[error] c.a.e.s.c.DefaultServer - 取消注册 Ebean Ebean:server=default38 时出错”。所以我相信这是由于 EbeanServers 没有关闭造成的。

那么,我怎样才能正确关闭它们呢?

最佳答案

这通常发生在存在命名冲突时。

你所在的地方:

String serverName = "default";
server = Ebean.getServer(serverName);

将其更改为具有唯一服务器名称的名称:

String serverName = "default" + UUID.randomUUID().toString();
server = Ebean.getServer(serverName);

当然,您可以使用一些计数器或类似的计数器,只需确保 Ebean 服务器的名称是唯一的。

关于java - Ebean 关闭在 Play 测试中被破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36340046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com