MongoDB 支持
Spring Data 对 MongoDB 的支持包含广泛的特性:
-
Spring 配置支持:通过基于 Java 的
@Configuration类或 XML 命名空间来配置 Mongo 驱动程序实例和副本集。 -
MongoTemplate 辅助类:在执行常见 Mongo 操作时提高开发效率,包含文档与 POJO 之间集成的对象映射。
-
异常转换:转换为 Spring 可移植的数据访问异常体系。
-
功能丰富的对象映射,与 Spring 的转换服务集成。
-
基于注解的映射元数据,可扩展以支持其他元数据格式。
-
基于 Java 的 Query、Criteria 和 Update DSL。
-
仓库接口的自动实现,包括对自定义查询方法的支持。
-
QueryDSL 集成,用于支持类型安全的查询。
对于大多数任务,您应使用 MongoTemplate 或仓库支持,二者都充分利用了丰富的映射功能。当需要访问诸如计数器自增或临时 CRUD 操作之类的功能时,应使用 MongoTemplate。MongoTemplate 还提供了回调方法,便于您获取底层 API 对象(例如 com.mongodb.client.MongoDatabase),以直接与 MongoDB 通信。各种 API 对象的命名约定旨在与基础 MongoDB Java 驱动程序保持一致,以便您可以轻松地将已有的知识映射到 Spring API 上。
本节小结
要求
Spring Data MongoDB 5.x 二进制包要求 JDK 17 及以上版本,以及 Spring Framework 7.0.9 及以上版本。
快速上手
一种快速搭建工作环境的简便方式是,通过 start.spring.io 创建一个基于 Spring 的项目,或在 Spring Tools 中创建一个 Spring 项目。
连接 MongoDB
使用 MongoDB 和 Spring 时的首要任务之一,是使用 IoC 容器创建一个 MongoClient 对象。主要有两种方式:使用基于 Java 的 Bean 元数据,或使用基于 XML 的 Bean 元数据。
模板 API
7 个项目
GridFS 支持
MongoDB 支持在其文件系统 GridFS 中存储二进制文件。 Spring Data MongoDB 提供了 GridFsOperations 和 ReactiveGridFsOperations 接口以及对应的实现类 GridFsTemplate 和 ReactiveGridFsTemplate ,让您可以与该文件系统交互。您可以通过传入 MongoDatabaseFactory/ReactiveMongoDatabaseFactory 以及一个 MongoConverter 来搭建模板实例,如下例所示:
对象映射
6 个项目
值表达式基础
值表达式是 Spring 表达式语言( SpEL )与属性占位符解析的结合。它将对程序化表达式的强大求值能力,与借助属性占位符解析从 Environment 获取值(例如配置属性)的简洁性结合起来。
生命周期事件
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 起,变更流让应用无需尾随 oplog 即可收到变更通知。
可尾游标
默认情况下,当客户端耗尽游标所提供的全部结果时, MongoDB 会自动关闭游标。在耗尽时关闭游标会将流变为有限流。对于固定大小集合,您可以使用可尾游标,使其在客户端消费完最初返回的数据后保持打开。
分片
MongoDB 通过分片支持大数据集,分片是一种将数据分布到多个数据库服务器上的方法。请参阅 MongoDB 文档,了解如何搭建分片集群及其要求与限制。
MongoDB 搜索
MongoDB 让用户能够使用专用的搜索索引进行关键词或词法搜索,以及向量搜索数据。
加密
客户端加密是一项在数据发送到 MongoDB 之前于应用内对其进行加密的功能。建议您先熟悉相关概念(最好参阅 MongoDB 文档),了解其能力与限制,然后再继续通过 Spring Data 应用加密。
提前优化
本章介绍 Spring Data 的提前( AOT )优化,这些优化建立在 Spring 的提前优化之上。