Что такое граница транзакции?

Я прочитал эту статью (предполагается, что я уже знаю, что такое граница транзакции ) и этот вопрос SO (не могу расшифровать значение границы транзакции из этого вопроса). Другими словами, я не нашел четких определений или попыток определения границ транзакций. Я понимаю, что такое переход на 100 %, но что такое концептуально граница транзакции?


person Mario Ishac    schedule 15.11.2018    source источник


Ответы (2)


Это место, где транзакция начинается или фиксируется/откатывается.

Например, метод с аннотацией @Transactional определяет две границы транзакции: когда метод вызывается, транзакция начинается, а когда он возвращается, транзакция фиксируется/откатывается.

person JB Nizet    schedule 15.11.2018
comment
Если в моей транзакции между границами транзакции возникает ошибка, происходит ли откат только на следующей границе транзакции, а не сразу? - person Mario Ishac; 15.11.2018
comment
По определению он откатывается на границе следующей транзакции, поскольку граница транзакции определяет момент отката транзакции. Это вы спрашиваете, когда транзакция откатывается, когда вы вызываете транзакционный метод, это происходит после того, как метод возвращает или бросает. - person JB Nizet; 15.11.2018
comment
Я думаю, теперь я понимаю, если бы я хотел откатиться до того, как все вещи в методе были выполнены, я бы рано вернулся/выбросил, что запускает откат? - person Mario Ishac; 15.11.2018
comment
Да, в большинстве случаев причиной отката является исключение, которое выдается и всплывает до тех пор, пока оно не будет выброшено из метода, запустившего транзакцию. - person JB Nizet; 15.11.2018

Вы можете прочитать ссылку Spring Границы транзакций:

Например, метод активатора шлюза или службы может быть аннотирован с помощью @Transactional, или TransactionInterceptor может быть определен в конфигурации XML с выражением pointcut, указывающим на конкретные методы, которые должны быть транзакционными. Суть в том, что у вас есть полный контроль над конфигурацией и границами транзакций в этих сценариях.

Другим важным фактором являются границы транзакций в потоке сообщений. При запуске транзакции контекст транзакции привязывается к текущему потоку. Таким образом, независимо от того, сколько конечных точек и каналов у вас есть в вашем потоке сообщений, контекст вашей транзакции будет сохранен, если вы гарантируете, что поток продолжается в том же потоке. Как только вы нарушите его, введя канал Pollable Channel или Executor Channel или инициировав новый поток вручную в каком-либо сервисе, граница Transactional также будет нарушена.

person user7294900    schedule 15.11.2018