Менеджеры множественных транзакций в Spring JPA - PullRequest
1 голос
/ 25 сентября 2019

Я хочу использовать два менеджера транзакций следующим образом

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

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

, и в моем коде присутствуют теги tx: на основе аннотаций, такие как:

 <tx:annotation-driven  mode="aspectj" transaction-manager="transactionManagerReadWrite"/>

  <tx:annotation-driven mode="aspectj" transaction-manager="transactionManagerReadOnly"/> 

, но я прочиталгде-то, что должен быть только один подарок на основе tx: annotation и ссылаться на другого менеджера транзакций, указав в теге @Transaction, например, следующие:

@Transactional("transactionManagerReadWrite")
@Transactional("transactionManagerReadOnly")

Ниже приведены мои вопросы и запросы

  1. Какой диспетчер транзакций считается действительным кандидатом на @Transactional, если в конфигурационном файле присутствуют два менеджера транзакций и два тега tx:annotation-driven, если мы не указываем имя диспетчера транзакций явно в аннотации @Transactional?
  2. Каким будет режим второго диспетчера транзакций, если в приложении рекомендуется использовать только один тег tx:annotation-driven, а режим указан только в теге tx:annotation-driven?то есть режимом по умолчанию для пружин является режим прокси, и я хочу использовать два диспетчера транзакций с режимом aspectj
  3. Как указать режим aspectj для второго диспетчера транзакций, если мы можем использовать только один тег tx:annotation-driven, а режим по умолчанию - proxy режим весной?

1 Ответ

2 голосов
/ 25 сентября 2019

Вы можете иметь только один <tx:annotation-driven />, так как он настроен на обработку @Transactional аннотаций.Вы указываете режим (proxy или aspectj) и диспетчер транзакций по умолчанию для связи с аннотациями @Transactional.

Таким образом, аспект применяется либо через прокси (режим proxy), либо с помощью ткачества загрузки или компиляции (режим aspectj).Существует только 1 аспект, и этот аспект использует диспетчер транзакций по умолчанию или тот, который определен в аннотации @Transactional.

Если вы укажете режим aspectj и transactionManagerReadWrite в качестве менеджера транзакций по умолчанию

<tx:annotation-driven  mode="aspectj" transaction-manager="transactionManagerReadWrite"/>

Теперь при использовании простого @Transactional он будет использовать transactionManagerReadWrite, при использовании @Transactional("transactionManagerReadOnly") будет использовать transactionManagerReadOnly.Любой из них будет сплетен, так как aspectj используется в качестве режима для применения транзакций.

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