【问题标题】:H2 - READ_UNCOMMITED transaction doesn't read uncommited changes made by another transaction, why?H2 - READ UNCOMMITTED 事务不读取另一个事务所做的未提交更改,为什么?
【发布时间】:2017-02-07 10:54:02
【问题描述】:

READ_UNCOMMITED 隔离级别应该有脏读,所以在这种情况下:

Thread1                              Thread2 (READ_UNCOMMITED)
  |                                     |
getAccount(1);                          |          
  |                                     |
updateAccount(account1)                 |                    
  |                                     |
 flush()                                |    
  |                                     |
  |                                   getAccount(1)
  |                                     |
 commitTx()                             |commitTx()
  |_                                    |_

Thread2.getAccount(1) 应该看到 Thread1 正在进行的未提交更改,不是吗?

好吧,我没有看到,我使用baDao.findOne(accountId); 获得的帐户看到的是原始 DB 值,没有来自正在运行的线程 1 的增量值,这可能是什么解释?

这是Thread1更新帐户的地方:

@Transactional(isolation=Isolation.READ_UNCOMMITTED)
@Override
public void addMoneyReadUncommited(int accountId, int ammount) {
    printIsolationLevel();
    BankAccount ba = baDao.findOne(accountId);
    ba.setMoney(ba.getMoney()+ammount);
    baDao.save(ba);
    flushEntityManager();
    logger.info("Money added");
}

我在 logger.info("Money added"); 停止 Thread1,然后 Thread2 运行:

@Transactional(readOnly=true, isolation=Isolation.READ_UNCOMMITTED)
@Override
public BankAccount getReadUncommited(int accountId){
    printIsolationLevel();
    BankAccount account = baDao.findOne(accountId);
    logger.info("get({}) -> {}",accountId, account);
    return account;
}

【问题讨论】:

  • 如果您使用的是v1.4或更高版本的H2数据库并使用MVStore(这是默认的),则默认隔离级别为READ_COMMITTED并在数据源上设置默认隔离级别或交易has no effect。

标签: jpa spring-data spring-data-jpa h2 isolation-level


【解决方案1】:

问题是我使用的数据库。我正在使用 H2 进行测试,但由于某种未知原因,第二个线程没有看到未提交的更改。

更改为 MariaDB 后,一切正常

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多