2016-05-30 185 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還有助於詳細監測信息: