MongoDB 支持
Spring Data 对 MongoDB 的支持包含了广泛的功能:
-
Spring 配置支持,支持基于 Java 的
@Configuration类或 XML 命名空间,用于 Mongo 驱动实例和副本集。 -
MongoTemplate 辅助类,在执行常见的 Mongo 操作时提高生产力。包括文档和 POJO 之间的集成对象映射。
-
异常转换 为 Spring 的可移植数据访问异常层次结构。
-
功能丰富的 对象映射,与 Spring 的转换服务集成。
-
基于注解的映射元数据,可扩展以支持其他元数据格式。
-
自动实现 Repository 接口,包括对自定义查询方法的支持。
-
QueryDSL 集成,支持类型安全的查询。
对于大多数任务,你应该使用 MongoTemplate 或 Repository 支持,这两者都利用了丰富的映射功能。MongoTemplate 是查找诸如递增计数器或临时 CRUD 操作等访问功能的地方。MongoTemplate 还提供了回调方法,使你能够轻松获取底层 API 构件,例如 com.mongodb.client.MongoDatabase,以便直接与 MongoDB 进行通信。各种 API 构件的命名约定旨在复制基础 MongoDB Java 驱动程序中的命名约定,因此你可以轻松将现有知识映射到 Spring API 上。
章节摘要
需求
Spring Data MongoDB 4.x 二进制文件需要 JDK 17 及以上版本以及 Spring Framework 6.2.3 及以上版本。
入门指南
一个简单的引导设置工作环境的方法是通过 start.spring.io 创建一个基于 Spring 的项目,或者在 Spring Tools 中创建一个 Spring 项目。
连接到 MongoDB
在使用 MongoDB 和 Spring 时,首要任务之一是通过 IoC 容器创建一个 MongoClient 对象。主要有两种方式可以实现这一点,一种是通过基于 Java 的 bean 元数据,另一种是通过基于 XML 的 bean 元数据。
模板 API
6 个项目
GridFS 支持
MongoDB 支持在其文件系统 GridFS 中存储二进制文件。Spring Data MongoDB 提供了 GridFsOperations 和 ReactiveGridFsOperations 接口,以及相应的实现类 GridFsTemplate 和 ReactiveGridFsTemplate,以便你与文件系统进行交互。你可以通过传递 MongoDatabaseFactory / ReactiveMongoDatabaseFactory 以及 MongoConverter 来设置一个模板实例,如下例所示:
对象映射
6 个项目
值表达式基础
值表达式(Value Expressions)是 Spring 表达式语言(SpEL)和属性占位符解析的结合体。它们将程序化表达式的强大评估能力与属性占位符解析的简单性相结合,从而能够从环境(如配置属性)中获取值。
生命周期事件
MongoDB 映射框架包含了多个 org.springframework.context.ApplicationEvent 事件,你的应用程序可以通过在 ApplicationContext 中注册特定的 bean 来响应这些事件。由于这些事件基于 Spring 的 ApplicationContext 事件基础设施,因此其他产品(如 Spring Integration)可以轻松接收这些事件,因为它们是基于 Spring 的应用程序中广为人知的事件机制。
审计
自 Spring Data MongoDB 1.4 起,可以通过在配置类上添加 @EnableMongoAuditing 注解来启用审计功能,如下例所示:
会话与事务
从 3.6 版本开始,MongoDB 支持会话的概念。使用会话可以启用 MongoDB 的因果一致性模型,该模型保证操作按照其因果关系顺序执行。这些会话分为 ServerSession 实例和 ClientSession 实例。在本节中,当我们提到会话时,指的是 ClientSession。
变更流
从 MongoDB 3.6 开始,变更流(Change Streams)允许应用程序在不跟踪 oplog 的情况下获取变更通知。
可追踪游标(Tailable Cursors)
默认情况下,当客户端消耗完游标提供的所有结果时,MongoDB 会自动关闭游标。在消耗完时关闭游标会将流转换为有限流。对于固定集合(capped collection),你可以使用可尾随游标(Tailable Cursor),该游标在客户端消耗完初始返回的数据后仍保持打开状态。
分片
MongoDB 通过分片(sharding)支持大规模数据集,这是一种将数据分布在多个数据库服务器上的方法。请参考 MongoDB 文档,了解如何设置分片集群、其要求以及限制。
加密(CSFLE)
客户端加密(Client Side Encryption)是一项功能,它会在数据发送到 MongoDB 之前在应用程序中对数据进行加密。我们建议你在继续通过 Spring Data 应用加密之前,先熟悉相关概念,最好从 MongoDB 官方文档中了解更多关于其功能和限制的信息。