Глобальная транзакция Spring vs локальная транзакция

при чтении документации Spring transaction я вижу, что она поддерживает как глобальные транзакции, так и локальные транзакции.

  • в простых терминах, что такое глобальная транзакция и что такое локальная транзакция?
  • Какие преимущества одного над другим? Каково их надлежащее использование?

Если я использую следующую конфигурацию-означает ли это, что это локальная транзакция?

<tx:annotation-driven transaction-manager="transManager" />

<bean id="transManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="emf" />
</bean>

Я попытался найти оба в Google и Stackoverflow, но не получили никаких ресурсов, объясняющих то же самое в простых терминах.

1 ответов


На самом деле есть много ресурсов, отвечающих на ваши первые два вопроса, например Весна Документации объясняет, что такое локальная и глобальная транзакция, и описывает их различия в главе 9.2 мотивации. В нескольких словах:

глобальная транзакция - управляемая транзакция сервера приложений, позволяющая работать с различными транзакционными ресурсами (это могут быть две разные базы данных, база данных и очередь сообщений, так далее)

локальная транзакция-это транзакция конкретного ресурса (например Транзакций Oracle) и сервер приложений не имеет к ним никакого отношения. (одна и та же глава объясняет плюсы и минусы каждого из них очень хорошо и намного лучше, чем я мог бы объяснить, поэтому я предлагаю вам взглянуть поближе)

отвечая на ваш более поздний вопрос. The документация говорит, что JpaTransactionManager способен обрабатывать глобальные транзакции, поэтому, глядя на часть представленного кода трудно сказать, является ли это локальной или глобальной транзакцией. Той же документации сказано, что локальных ресурсов транзакций DataSourceTransactionManager должен использоваться вместо этого.