AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

Spring Boot Starterを構成する

このガイドでは、Hibernate ORM用MongoDB拡張機能が提供するSpring Bootスターターの設定方法を学ぶことができます。スターターのインストール方法と、それを使用するアプリケーションの作成方法を学ぶには、「Spring Bootスターターの概要」を参照してください。

スターターをアクティブ化するには、次の例に示すように、アプリケーションの application.properties ファイルで spring.jpa.database-platform プロパティを MongoDB に設定します。

spring.jpa.database-platform=MongoDB

Starterは、この標準的なSpring Bootプロパティを使用するため、独自の専用設定は必要ありません。プロパティの値がそれ以外の場合、または設定されていない場合、Starterは非アクティブのままになります。非アクティブなStarterは、アプリケーションに影響を与えません。

スターターは、Spring Bootがspring.mongodb.*プロパティから作成するMongoClientインスタンスを再利用します。スターターは独自のクライアントを作成せず、クライアントのライフサイクルを管理しないため、アプリケーションはJava Persistence API (JPA)の永続化、ヘルスチェック、メトリクス、およびクライアントを使用するその他のコンポーネントに対して1つの接続プールを使用します。

スターターは、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 アプリケーションでは、このプロパティはデフォルトで有効になっています。

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 カラム名にマップしますが、スターターは、各エンティティのプロパティを同じ名前のドキュメントフィールドにマップします。スターターを介してブートストラップするエンティティは、Hibernate ORM を介して直接ブートストラップするエンティティと同じ方法で持続化されます。

別の命名ストラテジーを使用するには、ストラテジーをアプリケーションの application.properties ファイルで明示的に設定します。次の例に示すように:

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

警告

命名戦略を変更する前にドキュメントを移行する

命名戦略の変更は、戦略変更後にアプリケーションが書き込み (write) するドキュメントにのみ影響します。MongoDBは既存のドキュメントを移行しないため、コレクションには複数のタイプのフィールド名を使用するドキュメントが含まれる可能性があります。命名戦略を変更する前に、既存のドキュメントを移行してください。

スターターがアクティブであっても永続性ユニットを構成できない場合、スタートアップ時にエラーが報告されます。次の表では、これらのエラーについて説明します。

エラー
解決法

スターターが使用できるMongoClientはありません。

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 アノテーションを使用します。

  • このスターターは、単一の永続化ユニットを構成します。複数の永続化ユニットを使用するには、追加のユニットを自分で構成してください。