java - Spring Boot、六边形架构和分布式事务
问题描述
在六边形架构(或干净架构)中,我们有与基础设施组件执行一次或多次交互的用例。
这些用例通常是事务性操作(我们希望它们是原子的)。
所以我们将在用例方法级别使用@Transactional 注释。
@Component
@RequiredArgsConstructor
public class MyShinyUseCase implements MyShinyPrimaryPort {
private final transactionalSecondaryPort trPort1; <--- Database 1
private final anotherTransactionalSecondaryPort trPort2; <--- Database 2
@Override
@Transactional("UPS, THERE ARE 2 TRANSACTION MANAGERS IN THE CONTEXT")
public void useCaseMethod() {
trPort1.operate(); <--- Transactional resource
trPort2.operate(); <--- Transactional resource, is error I want
to rollback the trPort1.operate().
}
当用例与多个事务资源交互时会出现问题,每个事务资源都与它们的 TransactionManager 交互,因为 @Transactional 注释需要指定特定的 TransactionManager,但基础架构特定的 TransactionManager 是基础架构问题:它们不应该被引用域层,即使我们这样做了,也有几个 TransactionManagers 在起作用......
在六边形架构中管理涉及多个事务资源的事务的方法是什么?
解决方案
推荐阅读
- c++ - Sizeof 数组作为函数的参数传递
- python - 如何通过身份验证从 Cloud Scheduler 调用 Cloud Function
- java - 为 Spring Boot 应用程序创建 Docker 映像的问题
- python - 从 numpy 数组中删除总强度低于某个阈值的片段
- r - Rmarkdown 和 Renv 的重现性问题
- python - 在 Python 中使用 Lucas-Lehmer 测试的 Prime Mersenne 数
- r - 计算大 R 数据集中的数对
- javascript - 使用 AJAX 渲染 ASP.NET PartialView 不起作用
- arrays - 如何输出一系列分割线 Power Automate
- javascript - 正则表达式使每个单词的首字母大写,包括特殊字符