Каковы преимущества использования свойства тайм-аута в среде Spring? - PullRequest
4 голосов
/ 13 июля 2020

Когда я читаю этот учебник по транзакциям, я замечаю свойство timeout, которое я никогда раньше не использовал ни в одной из служб REST, которые я разработал.

Например, в этом code:

@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? это хорошая практика? может ли кто-нибудь рассказать мне о случаях использования свойства тайм-аута?

Ответы [ 3 ]

3 голосов
/ 16 июля 2020

Как Spring Docs Объяснение:

Тайм-аут позволяет клиенту контролировать, как долго транзакция выполняется до истечения времени ожидания и автоматического отката базовым инфраструктура транзакций.

Итак, преимущество очевидно - контролировать, как долго может длиться транзакция (и связанные с ней запросы), пока они не откатятся.

Q : Почему контроль времени транзакции полезен / хорош?

A: Если вы намеренно ожидаете, что ваша транзакция не займет слишком много времени - самое время использовать эту конфигурацию; если вы ожидаете, что ваша транзакция может занять больше времени, чем максимальное default время, полезно будет предоставить эту конфигурацию.

2 голосов
/ 20 июля 2020

Все приведенные выше ответы верны, но вы должны отметить следующее:

это свойство предназначено исключительно для использования с Propagation.REQUIRED или Propagation.REQUIRES_NEW, поскольку оно применяется только к недавно начатым транзакциям. .

как описано в документации.

2 голосов
/ 13 июля 2020
  1. Один - чтобы записи не блокировались на длительное время и не могли обслуживать другие запросы.

  2. Пусть говорит, что вы бронируете билет. На последней странице отправки он говорит так долго, и будет ли ваш пользователь ждать вечно? Итак, вы устанавливаете время ожидания http-клиента. Но теперь у вас истекло время ожидания http-клиента, что произойдет, если у вас нет тайм-аута транзакции? Вы показали пользователю ошибку, говоря, что это не удалось, но ваша транзакция требует времени, так как у нее нет тайм-аута и она фиксируется после того, как ваш http-клиент истек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...