Java && Management
4 subscribers
5 photos
6 links
Для senior Java-разработчиков, архитекторов и тимлидов: JVM, архитектура, эксплуатация и инженерное управление. Первичные источники, актуальные релизы и выводы для решений.

Автор — Андрей Овчаренко. Технический аудит: https://krot.name/
Download Telegram
@Transactional не накрывает сеть священным куполом

Транзакция сохраняет инвариант: изменение фиксируется целиком либо не фиксируется. Но её власть заканчивается на границе базы. HTTP и broker на аннотацию смотрят без благоговения.

По Spring Framework, @Transactional действует только в границе TransactionManager:
— self-invocation в proxy mode не перехватывается;
— checked exception по умолчанию не вызывает rollback;
PostgreSQL принимает 4 названия isolation level, но реализует 3 режима: READ UNCOMMITTED работает как READ COMMITTED.

В READ COMMITTED каждый SELECT получает новый snapshot. SQLSTATE 40001 и deadlock 40P01 требуют повтора всей транзакции.

Для DB + broker данные и outbox фиксируются вместе. Debezium читает изменения через CDC, Event Router преобразует запись. Дубликаты возможны, consumer остаётся идемпотентным. Иначе получаем распределённый бардак с очень уверенной аннотацией.

#Java #Spring #транзакции