我在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。
如果交易更快,那么一秒钟一切都会按预期进行。
答案 0 :(得分:0)
此问题的可能解决方法是对封闭方法进行简单重试:
@Retryable(backoff = @Backoff(value = 500,random = true))
void getSometingLocked(){
findById(id)
}