Вы должны создать отдельные конфигурации пружин для обоих ваших хранилищ данных вместе с TransactionManager
бобами. По крайней мере один из этих bean-компонентов должен иметь значение name
, чтобы при необходимости можно было использовать надлежащий менеджер транзакций:
@Transactional(transactionManager="DS1transactionManagerBeanName")
// DS1dataStoreRelevant class/method
Конечно, объединение логики, которая использует оба хранилища данных в одной транзакции, невозможно с JpaTransactionManager
. Если это то, что вы ищете, вам следует рассмотреть возможность использования распределенной JtaTransactionManager
, предоставляемой веб-контейнером, таким как IBM WebSphere, или другим, например, Atomikos / Bitronix и т. Д., Который обеспечивает транзакционность между различными хранилищами данных (ресурсы XA в целом).
В некоторых случаях возможный обходной путь (например, хранилища данных Oracle) может заключаться в обеспечении видимости из одной базы данных в другую и использовании единого хранилища данных / менеджера транзакций, но я не совсем уверен, как это работает на стороне базы данных.
Самым основным решением было бы просто не смешивать логику, влияющую на каждое хранилище данных, и упорядочивать ее в последовательных транзакциях, но, как уже говорилось, вся цепочка операций сама по себе не будет транснациональной, поэтому возможный откат будет применяться только к текущей транзакции (нет откат к совершенным ранее). Требуется некоторая дополнительная логика для введения политики отката / повтора с грязными флагами и т. Д.