Spring middle
@Transactional + долгий REST-вызов внутри — чем опасно?
Ответ
Транзакция удерживает соединение к БД всё время REST-вызова (секунды). Пул соединений исчерпается → все потоки ждут → сервис висит (connection starvation). Внешние вызовы нужно выносить за пределы транзакции.
Разбор: Транзакция держит соединение из пула захваченным на всё время REST-вызова, поэтому при множестве параллельных запросов пул исчерпывается и потоки виснут в ожидании соединения (connection starvation). Откатить сетевой вызов транзакция БД не может, а проблема именно в занятом соединении, а не в памяти; внешние вызовы следует выносить за пределы транзакции.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.