当前位置: 首页 > 知识库问答 >
问题:

使用Postgres的Spring数据悲观锁定超时

冀鸿才
2023-03-14

我没有成功地将Spring数据发送给postgres a以进行NoWait更新。

我已经在存储库中尝试过了:

@Lock(value = LockModeType.PESSIMISTIC_WRITE)
MyObject findByUuid(String uuid);

配置(代码段)

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
    entityManagerFactoryRef = "docsEntityManagerFactory",
    transactionManagerRef = "docsTransactionManager",

@Bean(name = "docsEntityManagerFactory")
public EntityManagerFactory docsEntityManagerFactory(DataSource docsDataSource) {
props.setProperty("javax.persistence.lock.timeout", "0");
...

我甚至将EntityManager注入到服务中,结果返回0:

info(em.getproperties().get(“javax.persistence.lock.timeout”));

但是上面只给了我“用于更新”,没有设置NOWAIT部分。我设置的事情是正确的(从另一个帖子来看,这应该是有效的)。

这让我更接近,尽管我不喜欢使用原始sql

 @Lock(value = LockModeType.PESSIMISTIC_WRITE)
 @Query(value = "SELECT * FROM the_table WHERE uuid = :uuid FOR UPDATE NOWAIT", nativeQuery = true)
 MyObject findByUuid(@Param("uuid") String uuid);

共有1个答案

漆雕育
2023-03-14

使用passimitic_force_increment

 类似资料:
  • 问题内容: 我在java下有spring项目,使用hibernate查询,我喜欢使用悲观锁定。 在Spring + Hibernate中如何进行悲观锁定? 编辑: 问题: 我想在一个方法中使用悲观锁定,并且我将此方法称为从不同的方法。当我从第一个方法调用它时,悲观的工作效果很好,但是当我从第二个方法调用它时,它给出了(无法提交事务) 例外: 问题答案: http://www.amicabile.c

  • 我遵循grails文档,它说要做悲观锁定,我可以这样做: 所以这会锁定计划实例,直到保存完成。现在在我的例子中,我想一次锁定多个计划,如下所示: 我在默认情况下是事务性的 grails 服务中执行此操作,但上述行没有按预期工作。它不会锁定所有行,并在执行并发事务时引发。 如何在阅读时锁定多行? 有关更多信息,请参见相关问题:grails中的并发事务导致数据库陈旧状态异常

  • 我正在尝试编写一个关于悲观写入的JUnit测试。我的想法是在一个事务中执行这个方法,同时在另一个事务中再次运行它,并尝试修改从第一个事务中的方法返回的元素。我预计会出现异常/超时,因为第一次调用应该锁定该行。我已经做了类似的事情,但是第二个事务(testNewTrans方法)毫不犹豫地修改了元素。有什么地方我做错了吗? in jUnit 在新班级

  • 我在用 Spring Boot 1.4.2 Spring Data JPA 1.10.5 PostgreSQL 9.5数据库 不幸的是,这不会刷新实体管理器缓存中我的实体的上一个实例。我有两个同时更新注册状态的请求 第二个等待第一个事务的事务提交 第二个不考虑第一个所做的更改。 从而破坏行为。 下面是请求的示例代码:

  • 我上面代码的日志是: 数据库也会更新。为什么lock()不工作?不是在lock()之后其他实例无法更新吗?还是别的什么?还是我错过了什么?

  • 我试图理解Hibernate中的悲观锁定机制(通过MySQL DB)。 我尝试运行以下示例: 但它并没有给我一个错误,而是执行得很好。是不是我误解了什么概念。这种行为正常吗? 我能够完美地测试乐观锁定,那么对于悲观锁定,是对概念有一些误解,还是我的代码缺少了一些东西。