2016-05-30 11 views
9

絶対にこれをスムーズにしてください。Grailsコントローラ/統合テストは成功しましたが、永久にハングします

2つのコントローラ統合テストが成功しました。ただし、Intellijまたはgradle checkで実行している場合、JVMは終了しません。統合テスト全体をコメントアウトすると、JVMはきれいに終了します。

いずれかの統合テストをデバッグすると、一時停止し、いくつかのスレッドが異なる状態にあることがわかります。待機中、実行中、スリープ中。

application.ymlに使用されるデータベースは、メモリ内1純粋である:

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

ベースを提出し、これを変更すると、問題が解決しません。 を変更しても役に立ちません。

@Rollbackを削除しようとしましたが、@Transactionalをタイムアウトで使用しても解決しましたが、それは修正されません。

新しいプロジェクトで統合テストを作成すると、デッドロック/ハング/待機なしで動作します。

この動作が開始されたチェンジセットを見つけるためにリビジョンに移動しましたが、変更は純粋にGSP、コントローラで行われ、インテグレーションテストの1つで追加のアサーション&テストメソッドでした。ログに

最後の行は、次のとおりです。

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 

私は1つの方法に統合テストメソッドを伐採しようとしましたし、問題が引き続き発生します。私が使用している

バージョンは次のとおりです。

$ ~/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

あなたは、データベースのURLに 'DB_CLOSE_ON_EXIT = true'を設定してみてくださいましたか? – Joch

+0

ちょうど試しましたが、修正しません。しかし、ありがとう。投稿が更新されました。 –

+1

デーモンとして停止したり設定しなかったスレッドはありませんか?新しいプロジェクトで統合テストを実行するとJVMが停止しましたか? – Joch

答えて

1

デバッグレベルのログを有効にします。また、できれば、grailsを3.1.9以降にアップグレードします。 (3.1.11はこれを書いている現在のものです)

GrailsとHibernateの間に設定の不一致がありました。 grailsチームはいくつかのインターフェースをすばやくアップグレードしていました。

結果は、あなたが考えていた設定が実行されなかったことです。また、キャッシュおよびトランザクション管理にも影響を与えました。

当時、Grailsがあるレベルで設定を取得し、別の設定で休止していることを確認するために冗長な設定を作成しなければなりませんでした。もうこれを行う必要はありませんが、当時はhereのような設定を使用しなければなりませんでした。

問題を見つけるために、私はgrailsのデバッグログを有効にし、休止状態とすべてのデータベースドライバを使用して、すべての処理を行いました。

This pluginも詳細な監視情報に役立ちます:

関連する問題