繁体   English   中英

如何使用Spring Boot和JPA解决H2上的表锁定?

[英]How to solve table locking on H2 using Spring Boot and JPA?

我似乎遇到了一个问题,对如何解决没有真正的线索。

我当前的应用程序基于带有JPA的Spring Boot,并且在第二次运行时,以下代码被锁定。

@RequestMapping(value="/", method = RequestMethod.GET)
public String index() {
    repository.save(new RawData("test"));
    repository.save(new RawData("test"));

    // hangs when the method index() is run 2 sequentially 
    RawData rawData = rawDataRepository.findOne(1L);
    System.out.println(rawData);

    return "#: " + repository.count();
}

第一次运行时一切正常,但是执行两次相同的代码可以锁定:

    RawData rawData = rawDataRepository.findOne(1L);

当方法挂起或等待超时时,尝试连接到数据库也会使我超时。

在Spring Service中调用相同的代码将导致相同的行为。

@Component
public class SyncService {

    @Autowired
    RawDataRepository rawDataRepository;

    void syncWithRemote() {
        // hang on this line...
        RawData rawData = rawDataRepository.findOne(1L);
        System.out.println(rawData);
    }

}

您应该使用两种技术:

  1. 通过在实体中使用@Version字段来使用乐观锁定
  2. 通过@Transactional注释对方法进行注释,从而添加事务支持。 通常,您还必须通过@EnableTransactionManagement注释Configuration类,但是Spring Boot会为您添加注释

那应该解决你的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM