绝对难倒了这一点。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线程转储。
我不知道如何进一步调试。有任何想法吗?
你有尝试设置'DB_CLOSE_ON_EXIT = TRUE;对数据库的URL? – Joch
刚刚尝试过,并没有解决它。不过谢谢。发布更新。 –
难道你没有任何线程,你没有停止或设置为守护进程?在新项目上运行集成测试时JVM停止了吗? – Joch