【问题标题】:Spring Database Lock: Need help in understanding the condition for database deadlockSpring Database Lock:需要帮助了解数据库死锁的情况
【发布时间】:2016-11-11 05:34:59
【问题描述】:

我正在使用 Spring-Data-Jpa 并使用 @Lock 注释(PESSIMISTIC_WRITE)来获取数据库(Oracle)锁。我需要帮助了解以下情况是否会导致数据库死锁。

  1. 事务 1(PROPAGATION_REQUIRES_NEW, ISOLATION_DEFAULT) 一个对说教师表进行数据库锁定(说锁定被 id=1 的行接管)。它尝试在子表中插入一条新记录,比如会议。教师表没有更新
  2. 当事务 1 正在进行时。事务 2(PROPAGATION_REQUIRED, ISOLATION_DEFAULT) 尝试更新教师表(id=1 的行)。它不需要数据库锁。
  3. 由于锁已被 id 为 1 的行接管。事务 2 必须等待事务 1 结束。

这种情况会导致数据库死锁吗?

【问题讨论】:

  • 您使用哪种事务传播?
  • 事务 1(PROPAGATION_REQUIRES_NEW, ISOLATION_DEFAULT).事务 2(PROPAGATION_REQUIRED, ISOLATION_DEFAULT)
  • 对于 oracle,默认隔离是 READ COMMITTED。

标签: spring oracle spring-data-jpa spring-transactions pessimistic-locking


【解决方案1】:

我认为您的情况会导致数据库锁定,是的,但不会触发死锁。而数据库锁是我们期望发生的事情来实现 ACID 事务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2017-06-19
    • 2016-05-03
    • 1970-01-01
    相关资源
    最近更新 更多