5

Springのを拡張するテストを書いていますAbstractTransactionalJUnit4SpringContextTests

私のアプリケーションコードには、次の注釈が付いたテスト内で呼び出すメソッドがあります。

@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)

問題

H2基になるデータソースのメモリ内モードとして使用しているときに問題が発生しました。それは私にエラーを与えます:

Caused by:org.h2.jdbc.JdbcSQLException : Timeout trying to lock tableMY_TABLE[50200-131]

伝播を削除すると機能し、OracleやMySQLなどの代替データベースをで使用するとPropagation.REQUIRES_NEWすべてが正常に機能します。

私はSpring3.0.2-RELEASEとを使用していH2 1.2.131ます。

H2Springを使用するにはどうすればよいですか?

4

2 に答える 2

3

何が問題なのかわかりませんが、データベースの URL に ;MVCC=TRUE を追加してみてください。

于 2010-08-11T09:29:13.667 に答える
1

play-framework ジョブ (別々のスレッドで実行される) を使用して JUnit テストを行うのと同じ問題があり、Thomas が提供するトリックが機能します! (データベース URL に ;MVCC=TRUE を追加します。)

このMVCCオプションは、TABLE全体をロックする代わりに「行レベルのロック」を有効にすると思います。そのため、ロックの問題はなくなりました 。http ://www.h2database.com/html/features.htmlの「行レベルのロック」機能を参照してください。 #in_memory_databases

H2でサポートされている「Row Level Locking」: <*9 MVCC (multi version concurrency) を使用する場合>

于 2011-02-01T13:46:13.640 に答える