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-RELEASEH2 1.2.131.

我怎样才能开始H2使用 Spring?

4

2 回答 2

3

我不知道问题是什么,但尝试将 ;MVCC=TRUE 附加到数据库 URL。

于 2010-08-11T09:29:13.667 回答
1

使用播放框架作业(运行到单独的线程)和 Thomas 提供的技巧进行 JUnit 测试时遇到了同样的问题作品!(将 ;MVCC=TRUE 附加到数据库 URL。)

我猜这个 MVCC 选项启用了“行级锁定”而不是锁定整个 TABLE,因此 LOCK 问题消失了,请参阅“行级锁定”功能: http ://www.h2database.com/html/features.html #in_memory_databases

H2 支持“行级别锁定”:<*9 使用 MVCC(多版本并发)时。>

于 2011-02-01T13:46:13.640 回答