首页 > 解决方案 > 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 在起作用......

在六边形架构中管理涉及多个事务资源的事务的方法是什么?

标签: javaspring-boottransactionsclean-architecturehexagonal-architecture

解决方案


推荐阅读