@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. Serialization failure — SQLSTATE 40001, deadlock — 40P01; повторять нужно всю транзакцию, а не последний удобный кусок.
Для DB + broker данные и outbox фиксируются вместе. Debezium читает изменения через CDC, Event Router преобразует запись перед публикацией. Дубликаты возможны, поэтому consumer остаётся идемпотентным. Иначе получаем распределённый бардак с очень уверенной аннотацией.
#Java #Spring #транзакции
Транзакция сохраняет инвариант: изменение фиксируется целиком либо не фиксируется. Но её власть заканчивается на границе базы. 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. Serialization failure — SQLSTATE 40001, deadlock — 40P01; повторять нужно всю транзакцию, а не последний удобный кусок.
Для DB + broker данные и outbox фиксируются вместе. Debezium читает изменения через CDC, Event Router преобразует запись перед публикацией. Дубликаты возможны, поэтому consumer остаётся идемпотентным. Иначе получаем распределённый бардак с очень уверенной аннотацией.
#Java #Spring #транзакции