【发布时间】:2014-08-07 16:12:09
【问题描述】:
我似乎遇到了一个问题,但不知道如何解决。
我当前的应用基于带有 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();
}
第一次运行时似乎一切正常,但是执行相同的代码 2 次给了我一个锁定:
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);
}
}
【问题讨论】:
-
为什么要从控制器调用存储库方法?首先添加一个服务接口并查看结果。
-
我原来是这样做的,并且得到了相同的行为。这只是解释问题的测试代码。我也会用服务代码更新代码
标签: spring jpa h2 spring-boot