是否可以在单个 Spring 启动应用程序中同时使用 Spring Data R2DBC 和 Spring Data JPA?

Is it possible to use both Spring Data R2DBC and Spring Data JPA in a single Spring boot application?

我有一个应用程序正在使用 Spring data JPA 和 hibernate envers 进行数据库审计。 由于 R2DBC 尚不支持审计,是否可以在单个应用程序中使用两者的组合?

如果是,计划使用 Spring Data JPA 进行插入、更新和删除操作,以便所有 DB 审计都将由 hibernate envers 处理。并使用 R2DBC 进行反应性非阻塞 API 来读取数据。

如果否,是否有任何关于如何实现响应式 API 和审计的建议?

  1. Spring 通过 @EnableR2dbcAuditingcheck my example.

    提供了简单的审计
  2. 在反应式应用程序中混合 JPA 也是可能的,我有 an example 在反应式应用程序中演示 运行 JPA,但没有在其中添加 r2dbc。

  3. 对于您的计划,更好的解决方案是在数据库拓扑上应用 cqrs 模式,为您的应用程序使用数据库集群。

    • 应用修改的JPA,使用main/master数据库接受修改,同步修改到secondary/slave数据库。
    • r2dbc查询如你所料,使用secondary/slave数据库查询。
    • 在前端使用网关进行查询和命令服务。

更新:我创建了一个示例来演示JPA and R2dbc coexistence in a single webflux application。但我不建议在 real-world 应用程序中使用它。如果您确实需要,请考虑上面的第三种解决方案。

是的,这是可能的,但是您可能会遇到两个问题,一个是需要明确处理多个回购模块(例如,指定各个模块的路径)。

其次,JDBC/JPA Spring 引导自动配置将被禁用,您需要将其导入回来。 Reactive and Non Reactive repository in a Spring Boot application with H2 database 中报告了这些问题 在这个问题中可以找到解决它们的方法和思考过程: https://github.com/spring-projects/spring-boot/issues/28025