У меня проблема с @TransactionalEventListener
.
Учитывая :
- Kotlin 1.3.50
- Spring Webflux
- Spring Data
- Hibernate 5
- Postgres JDB C (не RDB C!)
Что происходит :
Запрос к контроллеру выполнен.
Служба выполнила некоторую работу в методе, помеченном как @Transactional
событие и опубликованное событие.
Ответ возвращен клиенту
Слушатель события, помеченный как @Async
, @TransactionalEventListener
и @Transactional
не запускается.
Что я сделал:
Я отладил в метод обслуживания, который публикует событие, чтобы выяснить, является ли фактическая транзакция выполняется с помощью некоторого служебного метода stati c, который я не помню, который сказал мне то, что я подозревал - он находится в процессе.
Затем я включил отладочный вывод, чтобы увидеть журнал, говорящий: No transaction is in progress. Discarding event.
Я имею в виду, что обе публикующие и потребляющие стороны имеют аннотацию @Transactional
. Никаких изменений к стандартным параметрам аннотаций не сделано.
Я обнаружил похожую ситуацию в этом вопросе вопрос , но никто не ответил на это.
Также Я прочитал статью в dzone , но, похоже, ничего не говорится о моем случае.
Обходной путь:
Я могу избежать этого, либо заменив @TransactionalEventListener
на @EventListener
(увы, удалите обработку, связанную с транзакцией), либо изменив параметр fallbackExecute
на true
, который фактически совпадает с первым решением.
Предполагаемые стороны:
- Возможно, может иметь место отсутствие менеджера реактивных транзакций в среде webflux? И какая-то странная ошибка, не учитывающая JpaTransactionManager?