2016-05-30 192 views
9

绝对难倒了这一点。Grails控制器/集成测试成功,但永远挂起

我有两个控制器集成测试成功通过。但是,在Intellij或通过gradle check运行时,JVM不会退出。如果我注释掉整个集成测试,那么JVM就会彻底退出。

当调试任何集成测试时,我可以暂停一下,看看有几个线程处于不同的状态:WAITING,RUNNING,SLEEPING。

application.yml使用的数据库是完全在内存中的一个:

url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE 

改变这种基于文件不能解决问题。更改DB_CLOSE_ON_EXIT=TRUE也没有帮助。

我尝试删除@Rollback,甚至使用@Transactional超时,但这并没有解决它。

在新项目上创建集成测试,没有死锁/挂起/等待。

我已经通过修订回去找到此行为开始处的变更集,但这些变更纯粹是在其中一个集成测试中的GSP,控制器和其他声明&测试方法。

在日志的最后一行是:

INFO org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext - Closing org.springframework.boot[email protected]73386d72: startup date [Mon May 30 18:48:25 BST 2016]; root of context hierarchy 
INFO org.springframework.context.support.DefaultLifecycleProcessor - Stopping beans in phase -2147483648 
INFO org.grails.plugins.datasource.TomcatJDBCPoolMBeanExporter - Unregistering JMX-exposed beans on shutdown 
INFO org.grails.plugins.datasource.TomcatJDBCPoolMBeanExporter - Unregistering JMX-exposed beans 
INFO org.hibernate.tool.hbm2ddl.SchemaExport - HHH000227: Running hbm2ddl schema export 
INFO org.hibernate.tool.hbm2ddl.SchemaExport - HHH000230: Schema export complete 

我已经试过割集成测试方法到一个方法和问题仍然存在。

我使用的版本是:

$ ~/apps/grails-3.1.5/bin/grails --version 
|Grails Version: 3.1.5 
|Groovy Version: 2.4.6 
|JVM Version: 1.8.0_92 

的Windows 10 64位。

Here's线程转储。

我不知道如何进一步调试。有任何想法吗?

+1

你有尝试设置'DB_CLOSE_ON_EXIT = TRUE;对数据库的URL? – Joch

+0

刚刚尝试过,并没有解决它。不过谢谢。发布更新。 –

+1

难道你没有任何线程,你没有停止或设置为守护进程?在新项目上运行集成测试时JVM停止了吗? – Joch

回答

1

我打开调试级别日志记录。另外,如果可以的话,我会把grails升级到3.1.9后的东西。 (3.1.11是我写的。)

围绕着grails v3.1.5,Grails和Hibernate之间存在配置不一致的问题。 Grails团队正在快速升级几个接口,并且他们很快就完成了。

结果是,您没有最终运行您认为是的配置。它也影响缓存和事务管理。

当时,我不得不创建多余的配置以确保Grails在一个层次上获得配置,在另一个层次上休眠。您不必再这样做,但是当时,我不得不使用如here所列的配置。

为了找到问题,我打开了针对grails和hibernate以及我所有数据库驱动程序的调试日志记录,并一路走过它。

This plugin还有助于详细监测信息: