Overview
このガイドでは、Hibernate ORM用MongoDB拡張機能が提供するSpring Bootスターターの設定方法を学ぶことができます。スターターのインストール方法と、それを使用するアプリケーションの作成方法を学ぶには、「Spring Bootスターターの概要」を参照してください。
Starterを有効にする
スターターをアクティブ化するには、次の例に示すように、アプリケーションの application.properties ファイルで spring.jpa.database-platform プロパティを MongoDB に設定します。
spring.jpa.database-platform=MongoDBStarterは、この標準的な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インスタンスをカスタマイズします。
JPA プロパティの設定
このスターターは、標準の spring.jpa.* プロパティを使用します。次の表に、一般的に使用されるプロパティを示します。
プロパティ | 説明 |
|---|---|
| Hibernate ORMがスタートアップ時に実行するスキーママネジメントアクションを指定します。MongoDBをバックエンドとする永続化ユニットのデフォルト値は |
| Hibernate ORMが生成するステートメントをログに記録するかどうかを指定します。 |
| Hibernate ORMの構成プロパティをHibernate ORMに直接渡します。 |
| 持続性コンテキストがウェブ リクエストの全期間中開いたままになるかどうかを指定します。サーブレット Web アプリケーションでは、このプロパティはデフォルトで有効になっています。 |
| スターターが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は既存のドキュメントを移行しないため、コレクションには複数のタイプのフィールド名を使用するドキュメントが含まれる可能性があります。命名戦略を変更する前に、既存のドキュメントを移行してください。
スタートアップ エラーのトラブルシューティング
スターターがアクティブであっても永続性ユニットを構成できない場合、スタートアップ時にエラーが報告されます。次の表では、これらのエラーについて説明します。
エラー | 解決法 |
|---|---|
スターターが使用できる |
|
データベース名が利用できません。 |
|
専用クライアントを使用する
スターターのみが使用するクライアント(異なる認証情報を持つクライアントなど)を介して接続するには、クライアントとデータベース名を設定する MongoConfigurationContributor Bean を宣言します。この Bean を宣言すると、スターターは Spring マネージドクライアントの代わりに独自のクライアントを使用します。
複数の MongoConfigurationContributor Bean を宣言した場合、スターターは @Order アノテーションを使用して指定した順序でそれらを適用します。最後に値を設定した Bean がその値を決定します。
制限
スターターには、次の制限があります。
@DataJpaTestアノテーションはサポートされていません。MongoDBに対してテストを行うには、アプリケーションのコンテキスト全体を読み込む@SpringBootTestアノテーションを使用します。このスターターは、単一の永続化ユニットを構成します。複数の永続化ユニットを使用するには、追加のユニットを自分で構成してください。