通过DataSource设置H2的事务隔离级别

时间:2016-02-03 07:48:35

标签: java postgresql transactions h2

我正在为我的应用程序尝试不同的隔离级别,因为并发更新存在问题。我通过DataSource设置隔离级别,从中获取数据库连接

BasicDataSource ds = new BasicDataSource();
ds.setDefaultTransactionIsolation(
  Connection.TRANSACTION_REPEATABLE_READ)
/* more config ... */
ds.getConnection()

对于postgres 9.3数据库,行上的并发更新会触发错误,这是预期的,并且根据Standard SQL Transaction Isolation Levels上的postgres文档发送 ERROR: could not serialize access due to read/write dependencies among transactions 将隔离级别设置为Connection.TRANSACTION_READ_COMMITTED

时,此错误会按预期消失

尝试使用内存数据库中的H2重现此行为,隔离级别似乎不会改变我的unittest的结果。即使通过使用LOCK_MODE=0和/或Connection.TRANSACTION_READ_UNCOMMITTED设置数据库网址完全停用隔离,我也会收到并发更新错误org.h2.jdbc.JdbcSQLException: Concurrent update in table "MyTable": another transaction has updated or deleted the same row

我的问题是:如何配置H2连接以使用特定的隔离级别,我对锁定模式或连接的任何更改都不会帮助我摆脱JdbcSQLException。

1 个答案:

答案 0 :(得分:1)

H2不应该在多线程环境中运行。您可以将它用于开发目的等,但在线程,负载较重的环境中,您应该使用功能齐全的DBMS实例。

相关问题