У меня есть код устаревшего кода, который я пытаюсь повторно использовать в Spring. Этот код глубоко вложен в другой код, поэтому он непрактичен для перепроектирования и вызывается во многих ситуациях, только некоторые из них проходят через Spring. Я бы хотел использовать транзакцию Spring, если она была запущена; в противном случае, продолжать использовать существующий (устаревший) механизм соединения db. Наша первая мысль заключалась в том, чтобы сделать наш класс наследия bean и использовать введенный TransactionPlatformManager
, но, похоже, для нашей ситуации не существует каких-либо методов. Некоторые исследования показали, что Spring имеет класс под названием TransactionSynchronizationManager
, который имеет статический метод isActualTransactionActive()
. Мое тестирование указывает, что этот метод является надежным способом обнаружения активности транзакции Spring:
- При вызове через Spring сервис без аннотации
@Transactional
он возвращает false - При вызове через Spring сервис с
@Transactional
он возвращает true - В моем унаследованном методе, который называется существующим, он возвращает false
Мой вопрос: есть ли лучший способ определить, активна ли транзакция?