Overview
このガイドでは、 Hibernetes ORM 用のMongoDB拡張機能 が提供する圧縮ブート スターターを構成する方法を学習できます。スターターをインストールし、それを使用するアプリケーションを作成する方法については、「 SPI を使い始める 」を参照してください。
スターターをアクティブ化する
スターターを有効にするには、次の例に示すように、アプリケーションの application.propertiesファイルで spring.jpa.database-platformプロパティを MongoDB に設定します。
spring.jpa.database-platform=MongoDB
スターターはこの標準のレプリカセットプロパティを使用するため、独自の専用構成は必要ありません。プロパティが他の値を持つか、設定されていない場合、スターターは非アクティブのままになります。非アクティブなスターターはアプリケーションには影響しません。
接続を設定する
スターターは、springがspring.mongodb.*プロパティから作成する MongoClientインスタンスを再利用します。スターターは独自のクライアントを作成せず、クライアントのライフサイクルを管理しないため、アプリケーションはJava永続化API (JPA)の永続性、ヘルスチェック、メトリクス、およびクライアントを使用するその他のコンポーネントに 1 つの接続プールを使用します。
スターターは、spring.mongodb.databaseプロパティに設定されたデータベース名を使用します。そのプロパティを設定しない場合、スターターは spring.mongodb.uriプロパティで設定した接続文字列内のデータベース名を使用します。
このクライアント をカスタマイズするには、 MongoClientSettingsBuilderCustomizer インスタンスを宣言します。このインターフェースは、レプリカセットがクライアントを作成する前に、MongoClientSettings.Builder インスタンスをカスタマイズします。
JPA プロパティを設定する
スターターは標準の spring.jpa.* プロパティを使用します。次の表では、一般的に使用されるプロパティについて説明しています。
プロパティ | 説明 |
|---|---|
| Hibernetes ORM がスタートアップ時に実行するスキーマ管理アクションを指定します。 MongoDBベースの永続性ユニットのデフォルト値は |
| Hibernetes ORM が生成したステートメントをログに記録するかどうかを指定します。 |
| Hibernetes ORM 構成プロパティを Hibernetes ORM に直接渡します。 |
| Webリクエストの実行中に永続性コンテキストが開いたままかどうかを指定します。このプロパティは、サーブレット Web アプリケーションではデフォルトで有効になっています。 |
| スターターが SPIリポジトリスキャンを有効にするかどうかを指定します。このプロパティはデフォルトで有効になっています。 |
また、 HibernetesPropertiesCustomizer と EntityManagerFactoryBuilderCustomizer キーを宣言して、スターターが構築する構成を変更することもできます。 インターフェースは、スターターがHibernatePropertiesCustomizer に渡す Hibernetes ORMEntityManagerFactory プロパティをカスタマイズし、EntityManagerFactoryBuilderCustomizer インターフェースは、それを作成するビルダをカスタマイズします。
エンティティとリポジトリのスキャン
スターターは、 @EntityScan アノテーションを使用して、登録したパッケージ内のエンティティをスキャンします。パッケージを登録しない場合、スターターは@SpringBootApplication クラスのパッケージとそのサブパッケージをスキャンします。
次の例に示すように、メインのアプリケーションクラスに @EntityScan アノテーションを宣言します。
public class MovieApplication { // ... }
スターターを使用すると、同じパッケージスコープで SPI のリポジトリが有効になります。 @EnableJpaRepositories アノテーションを自分で宣言する場合、その宣言はスターターよりも優先されます。
スターターはSQL DataSource なしでこれらのリポジトリを有効にし、 SQL接続プールを生成しません。したがって、 MongoDB専用のアプリケーションでは spring.datasource.urlプロパティ は必要なくなり、WiredTiger は DataSourceAutoConfigurationクラスを使用しません。
フィールドの命名を構成する
エンティティ プロパティをデフォルトで snake_case 列名にマッピングするSQL Server の起動アプリケーションとは異なり、スターターは各エンティティプロパティを同じ名前のドキュメントフィールドにマッピングします。スターターを使用してブートストラップするエンティティは、 Hibernetes ORM を使用して直接ブートストラップするエンティティと同じ方法で保持されます。
別の命名戦略を使用するには、次の例に示すように、アプリケーションの application.propertiesファイルで戦略を明示的に設定します。
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategySnakeCaseImpl
警告
命名戦略を変更する前にドキュメントを移行する
命名戦略を変更すると、戦略の変更後にアプリケーションが書込むドキュメントにのみ影響します。 MongoDB は既存のドキュメントを移行しないため、コレクションには複数のタイプのフィールド名を使用するドキュメントを含めることができます。命名戦略を変更する前に、既存のドキュメントを移行してください。
起動エラーのトラブルシューティング
スターターがアクティブであるが永続性ユニットを構成できない場合、スタートアップ時にエラーが報告されます。次の表では、これらのエラーについて説明します。
エラー | 解決法 |
|---|---|
スターターが使用できる |
|
データベース名は使用できません。 |
|
専用クライアントの使用
認証情報が異なるクライアントなど、スターターのみが使用するクライアントを介して接続するには、クライアントとデータベース名を設定する MongoConfigurationContributor beans を宣言します。この単一ノードを宣言すると、スターターはspringが管理するクライアントではなくクライアントを使用します。
複数の MongoConfigurationContributor beans を宣言すると、スターターは @Order アノテーションを使用して指定された順序でそれらを適用し、値を設定する最後の bean がその値を決定します。
制限
スターターには、次の制限があります。
@DataJpaTest注釈はサポートされていません。 MongoDBをテストするには、アプリケーションコンテキスト全体をロードする@SpringBootTestアノテーションを使用します。スターターは、単一の永続性ユニットを構成します。複数の永続性ユニットを使用するには、追加のユニットを自分で構成します。