Spring JPA @QueryHint忽略了锁定超时?

时间:2019-04-03 16:53:16

标签: concurrency spring-data-jpa locking

我在Spring数据JpaRepository中有一个查询,如下所示:

@Lock(value = LockModeType.PESSIMISTIC_WRITE)
@QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value = "70000")})
Collection<AnyCLass> findBy ...

但是,在我的测试中,如果我在两个并发线程中运行事务(使用该查询作为第一个查询),则一秒钟后我会收到一个SQL Lock超时(SQL Error: 50200, SQLState: HYT00),这是默认的内存中的H2。 如果交易更​​快,那么一秒钟一切都会按预期进行。

1 个答案:

答案 0 :(得分:0)

此问题的可能解决方法是对封闭方法进行简单重试:

@Retryable(backoff = @Backoff(value = 500,random = true))
void getSometingLocked(){
 findById(id)
}