Spring boot 在Spring框架中使用timeout属性的优点是什么?

Spring boot 在Spring框架中使用timeout属性的优点是什么?,spring-boot,timeout,jta,Spring Boot,Timeout,Jta,当我阅读关于事务的教程时,我注意到timeout属性,我以前从未在我开发的任何REST服务中使用过它 例如,在此代码中: @Service @Transactional( isolation = Isolation.READ_COMMITTED, propagation = Propagation.SUPPORTS, readOnly = false, timeout = 30) public class CarService { @Autowired

当我阅读关于事务的教程时,我注意到
timeout
属性,我以前从未在我开发的任何REST服务中使用过它

例如,在此代码中:

@Service
@Transactional(
  isolation = Isolation.READ_COMMITTED, 
  propagation = Propagation.SUPPORTS, 
  readOnly = false, 
  timeout = 30)
public class CarService {
 
    @Autowired
    private CarRepository carRepository;
 
    @Transactional(
      rollbackFor = IllegalArgumentException.class, 
      noRollbackFor = EntityExistsException.class,
      rollbackForClassName = "IllegalArgumentException", 
      noRollbackForClassName = "EntityExistsException")
    public Car save(Car car) {
        return carRepository.save(car);
    }
}
使用
timeout
属性有什么好处?使用它是一种好的做法吗?有人能告诉我超时属性的用例吗

  • 一种是阻止记录被长时间锁定,无法满足任何其他请求

  • 假设你正在订票。在最终提交页面上,它说了这么长时间,您的用户会永远等待吗?所以您设置了http客户端超时。但是现在您有了http客户端超时,如果没有事务超时会发生什么?您向用户显示了错误,表示未成功,但您的事务需要时间,因为它没有任何超时,并且在http客户端超时后提交

  • 如前所述:

    超时使客户机能够控制事务在超时和被服务器自动回滚之前运行的时间 底层事务基础设施

    因此,好处显而易见——控制事务(及其下的查询)可以持续多长时间,直到它们被回滚

    问:为什么控制事务时间是有用的/好的

    答:如果您有意希望您的事务不会花费太长时间,那么现在是使用此配置的好时机;如果您希望您的事务可能需要比其
    默认值
    最长时间更长的时间,那么提供此配置将非常有帮助


    以上所有答案都是正确的,但您需要注意的是:

    此属性专门设计用于
    传播。必需
    传播。需要\u NEW
    ,因为它只适用于新启动的 交易


    正如文档所描述的。

    谢谢,所以是否添加超时属性是个好主意?是的。添加它是个好主意。但它不应该太短或太长,决定将是困难的一部分。您可以对此进行研究。Hi@Giorgi Tsiklauri,如果好处显而易见,为什么在现实世界中使用超时非常罕见,因为它是AOP控制和管理的又一个属性。如果您确信,您的交易不太可能需要很长时间,或者!如果您有意希望您的事务不会花费太长时间-现在是使用此配置的好时机。请您解释更多“AOP要控制和管理的一个属性”我已更新了答案。请看一看@事务由AOP设施管理和处理。如果你现在不明白,这里的一切都有点难以解释。。然而,我认为我提供了足够的信息来了解为什么使用它是好是坏。