Нетранзакционный вложенный метод Spring внутри @transactional такой же, как @transactional распространение = support - PullRequest
0 голосов
/ 04 июля 2018

i) Есть ли разница, 1) если я вызову нетранзакционный метод изнутри @transactional И 2) вызову @transactional с уровнем распространения = поддержка из того же метода @transactional?

ii) Есть ли разница в ответе на вопрос i) если это один и тот же боб или другой?

Спасибо

1 Ответ

0 голосов
/ 04 июля 2018

я) Есть ли разница,

1) если я вызову нетранзакционный метод изнутри @transactional AND

Если вы вызываете метод внутри транзакции без каких-либо настроек, транзакция будет охватывать вызывающий метод.

2) вызовите вызов @transactional с уровнем распространения = поддержкой из того же метода @transactional?

Propagation.SUPPORTS аннотированный метод будет выполняться в текущей транзакции, как если бы вы вызывали нетранзакционный метод.

Единственное различие между настройкой @Transactional(propagation = Propagation.SUPPORTS) и не настройкой @Transactional отмечено в javadoc :

Примечание. Для менеджеров транзакций с синхронизацией транзакций PROPAGATION_SUPPORTS немного отличается от транзакции вообще, так как определяет область транзакции, для которой будет применяться синхронизация. Как следствие, одни и те же ресурсы (JDBC Connection, Hibernate Session и т. Д.) Будут совместно использоваться для всей указанной области. Обратите внимание, что это зависит от фактической конфигурации синхронизации диспетчера транзакций.

ii) Есть ли разница в ответе на вопрос i) если это один и тот же боб или другой?

Spring @Transactional аннотация по умолчанию с использованием прокси AOP.

Когда вы звоните methodB из methodA в том же классе, прокси-сервер AOP не будет активирован для methodB (т.е. аннотация @Transactional в methodB полностью игнорируется).

Когда вы звоните из другого класса, поведение такое же, как у i)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...