【问题标题】:Is it possible to use both Spring Data R2DBC and Spring Data JPA in a single Spring boot application?是否可以在单个 Spring Boot 应用程序中同时使用 Spring Data R2DBC 和 Spring Data JPA?
【发布时间】:2020-09-26 21:37:03
【问题描述】:

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

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

如果没有,对如何同时实现反应式 API 和审计有什么建议吗?

【问题讨论】:

  • 是的,这应该可以。
  • 您可以潜在地使用 R2DBC 进行所有操作,并在一个单独的进程中使用库(如果可用)连接到数据库日志(例如 mysql-binlog-connector-java),该进程将捕获数据库更改和然后你将它们保存在你的审计表中。
  • 试试Hibernate Reactive(Hibernate下的一个新项目,目前有很多限制),不确定现在是否支持审计功能。

标签: spring-data-jpa spring-data-r2dbc


【解决方案1】:
  1. Spring 通过@EnableR2dbcAuditingcheck my example 提供了简单的审计。

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

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

    • JPA 用于应用更改,使用主/主数据库接受修改,并将更改同步到辅助/从数据库。
    • r2dbc 查询如您所愿,使用辅助/从属数据库进行查询。
    • 在前端使用网关进行查询和命令服务。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-22
      • 2018-09-17
      • 2015-12-28
      • 2019-01-22
      • 2020-12-09
      • 1970-01-01
      • 2020-08-27
      • 2017-11-29
      相关资源
      最近更新 更多