我似乎遇到了一个问题,并且没有真正的解决方法。
我当前的应用程序基于Spring Boot with JPA,以下代码在第二次执行时获取锁定。
@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);
}
}
答案 0 :(得分:0)
您应该使用两种技术:
@Version
字段@Transactional
注释注释您的方法来添加事务支持。通常,您还必须按@EnableTransactionManagement
注释Configuration类,但Spring Boot会为您创建那应该可以解决你的问题