@Transactional с таймаутом не работает в приложении Springboot для значения, отличного от 1 (таймаут =1)

Я использую spring-boot-starter-data-jpa из Spring Boot 2.0.2.RELEASE, используя spring-data-jpa. БД - это Oracle. JDK 1.8.

Я использую @Transactionalповерх метода, вызывающего длительный запрос. Когда таймаут транзакции установлен на 1, таймаут транзакции истекает в пределах 1 секунды. когда@Transactionnis до тайм-аута> 1, исключение тайм-аута отсутствует. Выполняется запрос, получаем ответ. Вот снимок моего кода:

@Transactional(propagation = Propagation.REQUIRES_NEW, timeout = 5)
public List<Pojo> doStuff() {
    result = myRepository.findDetails(); -- This call long running native query
  ...
}

Как ни странно, это работает, когда приложение запускается в режиме отладки, а точка останова сохраняется при вызове метода репозитория. Я пробовал следующее

  1. javax.persistence.query.timeout с подсказкой тоже не таймаут
  2. server.connection-timeout=3s - не работает
  3. spring.jpa.properties.javax.persistence.query.timeout=10 - не работает
  4. oracle.jdbc.ReadTimeout - работает, но не истекает в указанное время.

Если указано 100, то иногда возникает исключение за 1 минуту, иногда меньше / больше. Мы получаем ответ от БД через 5 минут. Мы хотели бы установить тайм-аут до этого и отправить клиенту ответ на тайм-аут.

0 ответов

Другие вопросы по тегам