У меня есть контроллер Spring, работа которого состоит в том, чтобы получить некоторую информацию из db + и обновить некоторые записи внутренней базы данных.
Помимо прочего, контроллер связывается с некоторыми сторонними сервисами, которым требуются маркеры доступа OAuth.У меня есть токен обновления и токен доступа, и всякий раз, когда срок действия токена истекает, я использую другую стороннюю службу для обновления токенов с помощью маркера обновления.Последние токены хранятся в базе данных и используются в следующих запросах.
Теперь, когда во время потока возникает исключение RuntimeException, вся транзакция откатывается.Проблема в том, что также токены, которые сохраняются в базе данных, откатываются.Так что в конечном итоге у меня нет информации о новых токенах, которые я получил, но старые токены становятся недействительными, как только я запрашиваю новые.
Небольшая иллюстрация:
Моя цель - откатить все, кроме части, включающей сохранение токена.
В настоящее время я чрезвычайно осторожен, чтобы перехватить все исключения RuntimeException (поскольку проверенные исключения не вызывают откат по умолчанию).Это довольно хлопотно и, похоже, не лучший подход.
Пожалуйста, не обращайте особого внимания на токены и особенности потока аутентификации.Они были просто использованы для иллюстрации ситуации.