对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

配置 Spring Boot Starter

在本指南中,您可以学习;了解如何配置MongoDB Extension for Hibernate ORM 提供的 Spring Boot starter。要学习;了解如何安装启动器并创建使用它的应用程序,请参阅开始使用 Spring Boot 启动器。

要激活启动器,请在应用程序的 application.properties文件中将 spring.jpa.database-platform属性设立为 MongoDB,如以下示例所示:

spring.jpa.database-platform=MongoDB

启动器使用这个标准 Spring Boot属性,不需要自己的专用配置。当该属性具有任何其他值或未设置时,启动器将保持非活动状态。不活动的启动器不会影响您的应用程序。

启动器会重复使用 Spring Boot 从 spring.mongodb.* 属性创建的 MongoClient实例。启动器不会创建自己的客户端,也不管理客户端的生命周期,因此您的应用程序将一个连接池用于Java Persistence API (JPA) 持久性、运行状况检查、指标以及使用客户端的任何其他组件。

启动器使用 spring.mongodb.database属性中设立的数据库名称。如果不设立该属性,启动程序将使用您在 spring.mongodb.uri属性中设立的连接字符串中的数据库名称。

要自定义此客户端,请声明一个 MongoClientSettingsBuilderCustomizer bean。此接口会在 Spring Boot 创建客户端之前自定义 MongoClientSettings.Builder实例。

启动器使用标准 spring.jpa.* 属性。下表描述了常用属性:

属性
说明

spring.jpa.hibernate.ddl-auto

指定 Hibernate ORM 在初创企业时执行的模式管理动作。 MongoDB支持的持久性单元的默认值为 none。

spring.jpa.show-sql

指定 Hibernate ORM 是否记录其生成的语句。

spring.jpa.properties.*

将 Hibernate ORM 配置属性直接传递给 Hibernate ORM。

spring.jpa.open-in-view

指定持久性上下文是否在 Web请求期间保持打开状态。默认下,此属性在 servlet Web 应用程序中启用。

spring.data.jpa.repositories.enabled

指定启动器是否启用 Spring Data JPA存储库扫描。该属性默认启用。

您还可以声明 HibernatePropertiesCustomizer 和 EntityManagerFactoryBuilderCustomizer Bean 来修改启动器构建的配置。 HibernatePropertiesCustomizer 接口可自定义启动器传递给 EntityManagerFactory 的 Hibernate ORM 属性,EntityManagerFactoryBuilderCustomizer 接口可自定义创建它的构建器。

启动器会扫描您使用 @EntityScan 注释注册的包中的实体。如果您没有注册任何包,启动器将扫描 @SpringBootApplication 类的包及其子包。

在主应用程序类上声明 @EntityScan 注解,如以下示例所示:

@SpringBootApplication
@EntityScan("org.example.model")
public class MovieApplication {
// ...
}

入门版会在同一包作用域中启用 Spring Data JPA 存储库。如果您自己声明 @EnableJpaRepositories 注解,则您的声明优先于启动器的声明。

启动器在没有SQL DataSource 的情况下启用了这些存储库,并且不带任何SQL连接池。因此,仅使用MongoDB 的应用程序不需要 spring.datasource.url属性,并且 Spring Boot 不使用其 DataSourceAutoConfiguration 类。

与SQL Spring Boot应用程序默认将实体属性映射到 snake_case 列名称不同,starter 将每个实体属性映射到同名的文档字段。通过启动器引导的实体与直接通过 Hibernate ORM 引导的实体的持久化方式相同。

要使用不同的命名策略,请在应用程序的 application.properties文件中显式设立该策略,如以下示例所示:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl

警告

在更改命名策略之前迁移文档

更改命名策略仅影响应用程序在策略更改后写入的文档。 MongoDB不会迁移现有文档,因此集合可以包含使用多种类型字段名称的文档。在更改命名策略之前,请先迁移现有文档。

当启动器处于活动状态但无法配置持久性单元时,它会在初创企业时报告错误。下表描述了这些错误:

错误
解决方案

没有 MongoClient 可供 starter 使用。

添加 spring-boot-mongodb 依赖项并设立spring.mongodb.* 属性,或在应用程序中声明 MongoClient bean。

没有可用的数据库名称。

将数据库名称添加到 spring.mongodb.uri属性中的连接字符串中,设立spring.mongodb.database属性,或使用 MongoConfigurationContributor bean设立名称。

要通过只有入门者使用的客户端(例如具有不同凭证的客户端)进行连接,请声明一个用于设置客户端和数据库名称的 MongoConfigurationContributor bean。当您声明此 Bean 时,启动器将使用您的客户端,而不是 Spring 托管的客户端。

如果声明多个 MongoConfigurationContributor bean,启动器会按照您使用 @Order 注解指定的顺序应用它们,最后设置一个值的 Bean 将决定该值。

启动器具有以下限制:

  • 不支持 @DataJpaTest 注解。要针对MongoDB进行测试,请使用 @SpringBootTest 注解,该注解会加载完整的应用程序程序上下文。

  • 启动器配置单个持久性单元。要使用多个持久性单元,请自行配置其他单元。