Overview
在本指南中,您可以学习;了解如何配置MongoDB Extension for Hibernate ORM 提供的 Spring Boot starter。要学习;了解如何安装启动器并创建使用它的应用程序,请参阅开始使用 Spring Boot 启动器。
激活 Starter
要激活启动器,请在应用程序的 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实例。
设置 JPA 属性
启动器使用标准 spring.jpa.* 属性。下表描述了常用属性:
属性 | 说明 |
|---|---|
| 指定 Hibernate ORM 在初创企业时执行的模式管理动作。 MongoDB支持的持久性单元的默认值为 |
| 指定 Hibernate ORM 是否记录其生成的语句。 |
| 将 Hibernate ORM 配置属性直接传递给 Hibernate ORM。 |
| 指定持久性上下文是否在 Web请求期间保持打开状态。默认下,此属性在 servlet Web 应用程序中启用。 |
| 指定启动器是否启用 Spring Data JPA存储库扫描。该属性默认启用。 |
您还可以声明 HibernatePropertiesCustomizer 和 EntityManagerFactoryBuilderCustomizer Bean 来修改启动器构建的配置。 HibernatePropertiesCustomizer 接口可自定义启动器传递给 EntityManagerFactory 的 Hibernate ORM 属性,EntityManagerFactoryBuilderCustomizer 接口可自定义创建它的构建器。
扫描实体和存储库
启动器会扫描您使用 @EntityScan 注释注册的包中的实体。如果您没有注册任何包,启动器将扫描 @SpringBootApplication 类的包及其子包。
在主应用程序类上声明 @EntityScan 注解,如以下示例所示:
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不会迁移现有文档,因此集合可以包含使用多种类型字段名称的文档。在更改命名策略之前,请先迁移现有文档。
排除启动错误
当启动器处于活动状态但无法配置持久性单元时,它会在初创企业时报告错误。下表描述了这些错误:
错误 | 解决方案 |
|---|---|
没有 | 添加 |
没有可用的数据库名称。 | 将数据库名称添加到 |
使用专用客户端
要通过只有入门者使用的客户端(例如具有不同凭证的客户端)进行连接,请声明一个用于设置客户端和数据库名称的 MongoConfigurationContributor bean。当您声明此 Bean 时,启动器将使用您的客户端,而不是 Spring 托管的客户端。
如果声明多个 MongoConfigurationContributor bean,启动器会按照您使用 @Order 注解指定的顺序应用它们,最后设置一个值的 Bean 将决定该值。
限制
启动器具有以下限制:
不支持
@DataJpaTest注解。要针对MongoDB进行测试,请使用@SpringBootTest注解,该注解会加载完整的应用程序程序上下文。启动器配置单个持久性单元。要使用多个持久性单元,请自行配置其他单元。