#java #spring-boot #spring-data-jpa #jta #atomikos
#java #весенняя загрузка #spring-data-jpa #jta #atomikos
Вопрос:
Привет, у меня распределенные транзакции, и я должен как-то ими управлять
Также в spring ecosystem ChainedTransactionManager может делать это, с другой стороны, в spring document Atomikos может использоваться для распределенных транзакций
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-jta.html
Какой из них я должен использовать?Я предпочитаю оставаться в spring librarys, но Atomikos — это гораздо больше, чем spring transaction manager?Если кто-то использует их оба, может сравнить плюсы и минусы
Ответ №1:
Использование Atomikos в целом является лучшим решением. В некоторых случаях вы можете использовать ChainedTransactionManager. Допущения, которые он делает, изложены в javadocs:
Реализация PlatformTransactionManager, которая управляет созданием транзакций, фиксацией и откатами к списку делегатов. Использование этой реализации предполагает, что ошибки, вызывающие откат транзакции, обычно происходят до завершения транзакции или во время фиксации самой внутренней PlatformTransactionManager.
Настроенные экземпляры будут запускать транзакции в указанном порядке и фиксировать / откатывать в обратном порядке, что означает, что PlatformTransactionManager, который с наибольшей вероятностью разорвет транзакцию, должен быть последним в настроенном списке. PlatformTransactionManager, выдающий исключение во время фиксации, автоматически приведет к откату остальных менеджеров транзакций вместо фиксации.
Вероятность совершения одной транзакции и сбоя другой по-прежнему сохраняется в ChainedTransactionManager.
Использование Atomikos — это реальная распределенная транзакция все или ничего для обеих баз данных. Но это также имеет некоторые последствия, которые могут повлиять на поддержку приложения, например, когда передача данных полностью зафиксирована в одной базе данных и подготовлена в другой, и в этот момент происходит сбой приложения. Вам нужно убедиться, что ваше приложение может восстановиться после этого сценария. Обычно передача данных полностью выполняется во второй базе данных при перезапуске приложения, но этого может и не произойти.
Итак, какой из них правильный? Это зависит.