微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Boot PostgreSQL、Neo4j 和 Atomikos XA 事务管理器

如何解决Spring Boot PostgreSQL、Neo4j 和 Atomikos XA 事务管理器

在 Spring Boot 应用程序中,我配置了 2 个不同的事务管理器:

@Bean("jpaTransactionManager")
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(entityManagerFactory);
    return transactionManager;
}

@Bean("neo4jTransactionManager")
public Neo4jTransactionManager transactionManager() {
    return new Neo4jTransactionManager(sessionFactory());
}

此外,我为 Postgresql 和 Neo4j 数据库提供了单独的服务:

@Service("postgresqlUserService")
@Transactional("jpaTransactionManager")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User create() {
        return userRepository.save(new User());
    }

.....

@Service("neo4jUserService")
@Transactional("neo4jTransactionManager")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;


    @Override
    public User create() {
        return userRepository.save(new User());
    }

另外,此类服务按预期工作,并与 Postgresql 和 Neo4j 数据库正确通信。现在我需要配置类似 XA 事务的东西。我需要能够在一种方法的范围内以原子方式在 Postgresql 和 Neo4j 数据库中创建用户。如果其中一个操作失败,我还需要从另一个数据库回滚更改,例如:

@Transactional
public void createuser() {
    postgresqlUserService.create();
    neo4jUserService.create();
}

我想,我可能会使用 Atomikos 事务管理器来实现它,但不知道这是一种正确的方法。您能否举例说明如何为这种情况配置 XA 事务管理器?

更新

基于下面的答案 https://stackoverflow.com/a/57885706/1219755 看起来 Neo4j 已经放弃了 XA 支持......所以实现这种功能的唯一方法是实现 Saga 微服务模式? Saga 对我当前的设置来说是巨大的开销。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。