【问题标题】:How make repository save synchronized with Spring Boot如何使存储库保存与 Spring Boot 同步
【发布时间】:2018-10-21 00:20:18
【问题描述】:

我有一种方法,首先通过一种类型从我的表中获取最后一个 id。 然后我用这个数字设置我的 bean 并保存

  Long number = geradorProtocoloService.getNumero(protocolo.getTipo()    
  protocolo.setNumber(number);     
  protocolo = protocoloRepository.saveAndFlush(protocolo);

我把这段代码放在一个同步块中

synchronized (this) {
  protocolo.setNumero(geradorProtocoloService.getNumero(protocolo.getTipo());
  protocolo = protocoloRepository.saveAndFlush(protocolo);
}

该方法有更多逻辑(保存文件等)然后将其返回给我的用户

但是当我运行我的测试时,他捕获了几次相同的数字(数字)我认为这是因为 jpa 在我执行 saveAndFlush 时没有提交我的事务。

那么我怎样才能使我的同步块中的所有内容都使用 jpa 提交

tks

【问题讨论】:

  • 它在服务中吗?服务是否用@Transactional注解?我认为您可能需要提供更多背景信息。

标签: spring-boot transactions spring-data-jpa


【解决方案1】:

您的分析可能是正确的。

通常事务由@Transactional 注释控制。因此,如果您在带有 @Transactional 注释的 Spring Bean 中的方法中提取同步块并从任何事务外部调用它,它将最终提交。

【讨论】:

    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 2016-11-20
    • 2021-03-05
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    相关资源
    最近更新 更多