是否有可能使用ReactiveCrudRepository
替代CrudRepository
与Hibernate和关系型数据库(如Mysql、Postgres等)一起使用?我已经尝试使用Spring Data Jpa和Hibernate进行了一些示例,但是无法完成。我只能找到一些针对MongoDB和cassandra的ReactiveCrudRepository
示例。
是否有可能使用ReactiveCrudRepository
替代CrudRepository
与Hibernate和关系型数据库(如Mysql、Postgres等)一起使用?我已经尝试使用Spring Data Jpa和Hibernate进行了一些示例,但是无法完成。我只能找到一些针对MongoDB和cassandra的ReactiveCrudRepository
示例。
由于 JPA 基于的思想是将数据模型的一部分加载到内存中,操作生成的对象模型,然后让 JPA 转换这些更改,而且所有这些都在一个事务中完成,因此在可预见的未来不会发生这种情况。
这与处理反应式存储的方式相反,您需要尝试进行原子更改,并尝试解耦加载、处理和存储,而且所有这些都不能阻塞。
R2DBC (响应式关系型数据库连接) 是这样一项标准的提案。 希望它能够说服 Oracle 转向响应式方法,或者如果无法实现,则成为标准。
而且已经有三种实现可用,第二个选项的机会看起来很有前途。
R2DBC 本身主要是一个 SPI,即数据库提供程序需要实现的 API。 SPI 的设计方式对实现者的要求最少。 但是这也使得 R2DBC 使用起来有些麻烦。 这样做的想法是,其他库将会使用该 SPI 构建出专门用于易用性的库,就像 JDBC 一样。
Spring Data R2DBC 是这样一个库,它提供了你所要求的支持:ReactiveCrudRepository
,尽管它与 JPA/Hibernate 独立,并且还没有 MySQL 的支持。
R2DBC 和 Spring Data R2DBC 都没有发布生产版本,至少需要数月才能完成。
Spring Data R2DBC刚刚发布了第一个里程碑。 请查看发布文章以获取其当前的功能。
R2DBC已经到达第6个里程碑。请参阅发布文章以获取详细信息。
还可以参考这个答案:为什么Spring不提供关系型数据库的反应式(非阻塞)客户端?
截至目前(2017年1月),这是不可能的。
目前与Spring Data的反应式部分相关的版本是 Spring Data Kay M1 (您可以检查项目主页上是否有更新版本)
Spring Data团队关于该版本的博客文章,特别是其中的反应式部分,开始于(强调我的部分):
Spring Data Kay M1是第一个支持反应式数据访问的版本。其初始支持的存储方式 - MongoDB、Apache Cassandra和Redis - 都已经提供了反应式驱动程序,这使它们成为这样一个原型的非常自然的候选者。
原因在于没有标准的非阻塞方式来访问关系数据库。因此,目前仅支持支持此类API的数据库。
使用JPA或JDBC实现ReactiveCrudRepository
,并将工作委托给线程池。这将在外部提供异步API,但仍将消耗线程的资源,并在独立数据访问之间阻塞,因此只能实现反应式方法的一小部分优势。
Mutiny.SessionFactory
bean。
3.然后将其注入到您的存储库类中。你可以尝试使用Quarkus框架和Panache Mongo Hibernate响应式存储库。https://quarkus.io/guides/mongodb-panache。它很容易管理MongoDB上的响应式存储库,虽然有点晚但希望能帮到你。