я) Есть ли разница,
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)