首页 > 解决方案 > 在 Spring 框架中使用 timeout 属性有什么好处?

问题描述

当我阅读有关事务的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使用财产有什么好处或优势?使用它是一个好习惯吗?谁能告诉我超时属性的用例?

标签: spring-boottimeoutjta

解决方案


正如Spring Docs所解释的:

超时使客户端能够控制事务在超时和被底层事务基础设施自动回滚之前运行多长时间。

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

问:为什么控制交易时间是有用的/好的?

A:如果您故意期望您的交易不会花费太长时间 - 现在是使用此配置的好时机;如果您预计您的事务可能需要比其default最大时间更长的时间,那么提供此配置很有帮助。


推荐阅读