由于并发更新的问题,我正在为我的应用程序尝试不同的隔离级别。我通过从中获取数据库连接的DataSource设置隔离级别
BasicDataSource ds = new BasicDataSource();
ds.setDefaultTransactionIsolation(
Connection.TRANSACTION_REPEATABLE_READ)
/* more config ... */
ds.getConnection()对于Postgres9.3数据库,对行的并发更新会触发错误,这是意料之中的,根据Standard SQL Transaction Isolation Levels上的postgres文档
ERROR: could not serialize access due to read/write dependencies among transactions将隔离级别设置为Connection.TRANSACTION_READ_COMMITTED时,此错误会按预期消失
尝试使用内存数据库中的H2重现此行为,隔离级别似乎不会改变我的单元测试的结果。即使在使用LOCK_MODE=0和/或Connection.TRANSACTION_READ_UNCOMMITTED设置数据库url的情况下完全禁用隔离,我也会在并发更新org.h2.jdbc.JdbcSQLException: Concurrent update in table "MyTable": another transaction has updated or deleted the same row上出错
我的问题是:如何配置H2连接以使用特定的隔离级别,我对锁定模式或连接所做的任何更改都不能帮助我摆脱JdbcSQLException。
发布于 2016-08-24 22:51:59
H2不应该在多线程环境中运行。您可以将其用于开发等目的,但在线程化、重载环境中,您应该使用全功能DBMS的实例。
https://stackoverflow.com/questions/35171248
复制相似问题