Как я могу заставить H2 работать с Spring? - PullRequest
4 голосов
/ 04 августа 2010

Я пишу тест, который расширяет AbstractTransactionalJUnit4SpringContextTests Spring.

В моем коде приложения у меня есть метод, который я вызываю внутри теста, помеченного следующим образом:

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

Проблема

Я столкнулся с проблемой при использовании H2 в качестве основного источника данных в режиме памяти. Это дает мне ошибку:

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

Когда я удаляю распространение, оно работает, и когда я использую альтернативную базу данных, такую ​​как Oracle или MySQL с Propagation.REQUIRES_NEW, все работает нормально.

Я использую Spring 3.0.2-RELEASE и H2 1.2.131.

Как мне заставить H2 работать с Spring?

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Я не знаю, в чем проблема, но попробуйте добавить; MVCC = TRUE к URL базы данных.

1 голос
/ 01 февраля 2011

У меня была такая же проблема при выполнении JUnit Tests с заданиями play-framework (которые работают в отдельных потоках) и трюк, предоставленный Томасом, работает!(добавление; MVCC = TRUE к URL базы данных.)

Я полагаю, что эта опция MVCC включает блокировку уровня строки вместо блокировки всей таблицы, поэтому проблема LOCK исчезла, см. «Блокировка уровня строки».функция на: http://www.h2database.com/html/features.html#in_memory_databases

«Блокировка уровня строки», поддерживаемая в H2: <* 9 При использовании MVCC (параллельная версия с несколькими версиями).>

...