Overview
En esta guía, aprenderá a configurar el iniciador de Spring Boot que proporciona la extensión MongoDB para Hibernate ORM. Para aprender a instalar el iniciador y crear una aplicación que lo utilice, consulte la guía "Primeros pasos con el iniciador de Spring Boot".
Activar el arrancador
Para activar el iniciador, establezca la propiedad spring.jpa.database-platform en MongoDB en el archivo application.properties de su aplicación, como se muestra en el siguiente ejemplo:
spring.jpa.database-platform=MongoDB
El iniciador utiliza esta propiedad estándar de Spring Boot y no requiere ninguna configuración específica. Si la propiedad tiene otro valor o no está definida, el iniciador permanece inactivo. Un iniciador inactivo no afecta a la aplicación.
Configura la conexión
El iniciador reutiliza la instancia MongoClient que Spring Boot crea a partir de las propiedades spring.mongodb.*. El iniciador no crea un cliente propio ni gestiona su ciclo de vida, por lo que su aplicación utiliza un único grupo de conexiones para la persistencia de la API de persistencia de Java (JPA), las comprobaciones de estado, las métricas y cualquier otro componente que utilice el cliente.
El iniciador utiliza el nombre de la base de datos configurado en la propiedad spring.mongodb.database. Si no se configura dicha propiedad, el iniciador utiliza el nombre de la base de datos que se encuentra en la cadena de conexión configurada en la propiedad spring.mongodb.uri.
Para personalizar este cliente, declare un bean MongoClientSettingsBuilderCustomizer. Esta interfaz personaliza la instancia MongoClientSettings.Builder antes de que Spring Boot cree el cliente.
Establecer propiedades JPA
El iniciador utiliza las propiedades estándar spring.jpa.*. La siguiente tabla describe las propiedades de uso común:
Propiedad | Descripción |
|---|---|
| Especifica la acción de gestión de esquema que Hibernate ORM realiza al iniciarse. El valor predeterminado para las unidades de persistencia respaldadas por MongoDB es |
| Especifica si Hibernate ORM registra las sentencias que genera. |
| Pasa las propiedades de configuración de Hibernate ORM directamente a Hibernate ORM. |
| Especifica si el contexto de persistencia permanece abierto durante la duración de una solicitud web. Esta propiedad está habilitada de forma predeterminada en las aplicaciones web de servlets. |
| Especifica si el iniciador habilita el escaneo del repositorio de Spring Data JPA. Esta propiedad está habilitada por defecto. |
También puede declarar beans HibernatePropertiesCustomizer y EntityManagerFactoryBuilderCustomizer para modificar la configuración que crea el iniciador. La interfaz HibernatePropertiesCustomizer personaliza las propiedades del ORM de Hibernate que el iniciador pasa a EntityManagerFactory, y la interfaz EntityManagerFactoryBuilderCustomizer personaliza el constructor que las crea.
Escaneo de entidades y repositorios
El iniciador busca entidades en los paquetes que registres mediante la anotación @EntityScan. Si no registras ningún paquete, el iniciador escanea el paquete de tu clase @SpringBootApplication y sus subpaquetes.
Declara la anotación @EntityScan en la clase principal de tu aplicación, como se muestra en el siguiente ejemplo:
public class MovieApplication { // ... }
El starter habilita los repositorios de Spring Data JPA dentro del mismo ámbito de paquete. Si declara usted mismo la anotación @EnableJpaRepositories, su declaración tendrá prioridad sobre la del starter.
El iniciador habilita estos repositorios sin una DataSource SQL y no proporciona un pool de conexiones SQL. Por lo tanto, una aplicación que solo utiliza MongoDB no requiere la propiedad spring.datasource.url, y Spring Boot no utiliza su clase DataSourceAutoConfiguration.
Configurar la nomenclatura de los campos
A diferencia de una aplicación SQL Spring Boot, que asigna las propiedades de la entidad a los nombres de columna snake_case por defecto, el starter asigna cada propiedad de la entidad a un campo del documento con el mismo nombre. Una entidad que se inicializa mediante el starter persiste de la misma manera que una entidad que se inicializa directamente mediante Hibernate ORM.
Para utilizar una estrategia de nomenclatura diferente, configure la estrategia explícitamente en el archivo application.properties de su aplicación, como se muestra en el siguiente ejemplo:
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl
Advertencia
Migrar los documentos antes de cambiar la estrategia de nomenclatura.
Cambiar la estrategia de nomenclatura solo afecta a los documentos que tu aplicación escriba después del cambio. MongoDB no migra los documentos existentes, por lo que una colección puede contener documentos que utilicen varios tipos de nombres de campo. Migra tus documentos existentes antes de cambiar la estrategia de nomenclatura.
Solucionar errores de inicio
Cuando el iniciador está activo pero no puede configurar una unidad de persistencia, informa del error al arrancar. La siguiente tabla describe estos errores:
Error | Resolución |
|---|---|
No hay | Agregue la dependencia |
No hay nombre de base de datos disponible. | Agregue el nombre de la base de datos a la cadena de conexión en la propiedad |
Utilice un cliente dedicado
Para conectarse mediante un cliente que solo utiliza el iniciador, como un cliente con credenciales diferentes, declare un bean MongoConfigurationContributor que configure el cliente y el nombre de la base de datos. Al declarar este bean, el iniciador utilizará su cliente en lugar del cliente gestionado por Spring.
Si declara más de un bean MongoConfigurationContributor, el iniciador los aplica en el orden que especifique mediante la anotación @Order, y el último bean que establece un valor determina ese valor.
Limitaciones
El motor de arranque tiene las siguientes limitaciones:
La anotación
@DataJpaTestno es compatible. Para realizar pruebas con MongoDB, utilice la anotación@SpringBootTest, que carga el contexto completo de la aplicación.El programa de inicio configura una única unidad de persistencia. Para usar más de una unidad de persistencia, configure las unidades adicionales manualmente.