JDB C, Spring Transactions и многопоточность - PullRequest
0 голосов
/ 14 июля 2020

У меня следующий сценарий

  • У меня есть служба-исполнитель, выполняющая 5 потоков
  • В каждом потоке я открываю транзакцию БД (через spring @transaction) и делаю запрос на обновление, выполните некоторая обработка в течение нескольких секунд и повторное обновление строки БД
  • Если я выдаю команду shutdownnow серверу-исполнителю и подожду минуту, все запущенные потоки получат прерывание
  • Поскольку возникает исключение прерывания, процесс должен быть откат.

Я вижу странное поведение в этом случае. для MS SQL все работает как указано выше. Но для oracle все потоки получают откат. Некоторые из них не могут выполнить откат и генерируют следующую ошибку: «Не удалось выполнить откат транзакции JDB C; вложенное исключение - java. sql .SQLRecoverableException: Closed Connection» Кроме того, по моим наблюдениям, в случае ошибок oracle сохраняет блокировки в течение нескольких минут, а затем освобождает записи для чтения. Я использую OJDBC8 и oralce 12 C. Мой вопрос здесь в том, что всякий раз, когда возникает исключение прерывания и код выполняет запросы к базе данных, Oracle JDB C неявно обрабатывает прерывание и закрывает текущее соединение?

...