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