【问题标题】:Using both CassandraRepository and ReactiveCassandraRepository in one Spring Boot application在一个 Spring Boot 应用程序中同时使用 CassandraRepository 和 ReactiveCassandraRepository
【发布时间】:2021-09-04 10:00:30
【问题描述】:

我正在开发一个 Spring Boot WebFlux 应用程序。我使用的数据库是 Cassandra,ReactiveCassandraRepository 主要用于处理数据库操作。

我需要将 Spring Batch 添加到我的项目中以处理一些长期运行的作业。但是 Spring Batch 不支持响应式模型。由于这个原因,我使用CassandraRepositoryReactiveCassandraRepository 为每个条目创建了两个存储库。 Spring Batch 将使用通过扩展 CassandraRepository 创建的标准存储库,而 Spring Boot 应用程序的其他部分将使用非阻塞 ReactiveCassandraRepository

如果我采用这种方法会有问题吗?我计划更新代码并扩展 AbstractCassandraConfiguration 而不是 AbstractReactiveCassandraConfiguration 来定义 Cassandra 配置,但我不确定是否应该同时使用 @EnableCassandraRepositories@EnableReactiveCassandraRepositories 注释。

如果我能就此获得一些反馈,我们将不胜感激。具体来说;

  1. 这样评价正确吗?
  2. 如何在没有多个版本库的情况下在 Spring Boot WebFlux 应用程序中使用 Spring Batch?

【问题讨论】:

    标签: spring-boot spring-batch spring-webflux spring-data-cassandra


    【解决方案1】:

    这是配置问题。您应该能够配置这两种类型的存储库并在应用程序的每个部分中使用您需要的一种。

    也就是说,我不会在同一个应用程序/JVM 中混合使用 Web 应用程序和批处理应用程序。遵循让一件事做一件事并做好的 Unix 理念,我会在自己的 JVM 中分离批处理应用程序。这是更清洁的 IMO,可以通过设计解决问题。

    【讨论】:

    • 嗨@Mahmoud Ben Hassine,感谢您的回复,这完全有道理。甚至我更愿意将 Batch 项目与 API 项目分离。但如果我这样做,那么我将不得不使用消息传递机制来触发 API 项目中的作业,这将是额外的工作。我宁愿让事情尽可能简单。你怎么看?
    • 是的,您可以让您的 API 控制器将 JobLaunchRequest 放入队列中,以便由启动您的工作的工作人员接听。这确实需要更多的工作,但 IMO 的设计更简洁。否则,您可以始终将作业保留在同一个 JVM 中并使用本地线程启动它们。这不应该阻止您配置两个存储库 bean(一个响应式和一个非响应式)并将非响应式 bean 用于批处理作业。
    • 我相信我回答了你的问题,所以请接受它。否则,让我知道缺少什么被接受。谢谢。
    • 您好 Mahmoud,感谢您的详细回答。我还有一个澄清 - 我在 WebFux 应用程序中使用 Spring Data Reactive Cassandra。如果我想同时使用响应式和非响应式 spring 数据存储库,我应该使用AbstractCassandraConfiguration 还是AbstractReactiveCassandraConfiguration。我尝试同时使用它们,在这两种情况下,反应式和非反应式存储库都可以正常工作。但我只想仔细检查一下。也必须使用EnableCassandraRepositoriesEnableReactiveCassandraRepositories 吗?我的代码也没有这两种情况。
    • 从我的 PoV 来看,两者都正常。选择适合您的任何方法。
    猜你喜欢
    • 2017-09-19
    • 2021-02-25
    • 2019-12-19
    • 2020-09-26
    • 2014-11-04
    • 2015-12-28
    • 2016-05-25
    • 2016-06-05
    • 2018-09-12
    相关资源
    最近更新 更多