如何让 H2 与 Spring 一起工作?

发布于 2024-09-13 00:29:43 字数 631 浏览 8 评论 0原文

我正在编写一个扩展 Spring 的 AbstractTransactionalJUnit4SpringContextTests 的测试。

在我的应用程序代码中,我有一个在测试中调用的方法,注释如下:

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

问题

我在使用 H2 作为内存模式下的底层数据源时遇到了问题。它给了我错误:

原因:org.h2.jdbc.JdbcSQLException:尝试锁定表超时MY_TABLE[50200-131]

当我删除传播时,它有效,当我使用 Oracle 或 MySQL 等替代数据库和 Propagation.REQUIRES_NEW 时,一切正常。

我正在使用 Spring 3.0.2-RELEASEH2 1.2.131

如何让 H2 与 Spring 一起使用?

I am writing a test which extends Spring's AbstractTransactionalJUnit4SpringContextTests.

In my application code I have a method which I call inside the test annotated by the following:

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

Problem

I run into a problem while using H2 as the underlying data source in-memory mode. It gives me the error:

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

When I remove the propagation, it works, and when I use an alternative database such as Oracle or MySQL with Propagation.REQUIRES_NEW, everything works fine.

I am using Spring 3.0.2-RELEASE and H2 1.2.131.

How can I get H2 to work with Spring?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

转瞬即逝 2024-09-20 00:29:43

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

I don't know what the problem is, but try appending ;MVCC=TRUE to the database URL.

枕梦 2024-09-20 00:29:43

使用 play-framework 作业(运行到单独的线程)进行 JUnit 测试时遇到同样的问题,并且 Thomas 提供的技巧有效! (将 ;MVCC=TRUE 附加到数据库 URL。)

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

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

Had the same problem doing JUnit Tests with play-framework Jobs (that run into separate threads) and trick provided by Thomas works! (appending ;MVCC=TRUE to the database URL.)

I guess this MVCC option enables 'Row Level Locking' instead of locking the whole TABLE, and so the LOCK issue is gone, see "Row Level Locking" feature on:
http://www.h2database.com/html/features.html#in_memory_databases

'Row Level Locking' supported in H2: <*9 When using MVCC (multi version concurrency).>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文