Absolutey对此感到难过。
我有两个成功通过的控制器集成测试。但是,在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.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@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一个线程转储。
我不知道如何进一步调试。有什么想法吗?
答案 0 :(得分:1)
我会启用调试级别日志记录。另外,如果可以,我会将grails升级到3.1.9之后的内容。 (3.1.11是我写的最新内容。)
在Grails v3.1.5周围,Grails和Hibernate之间存在配置不一致。 grails团队正在快速升级几个接口,他们很快就完成了。
结果是您没有最终运行您认为的配置。它还影响了缓存和事务管理。
当时,我不得不创建冗余配置,以确保Grails在一个级别获得配置,在另一个级别进行休眠。您不必再这样做了,但当时我必须使用类似here列出的配置。
为了找到问题,我启用了grails和hibernate以及所有数据库驱动程序的调试日志记录,并且一直都在使用它。
This plugin也有助于详细的监控信息: