sql >> データベース >  >> NoSQL >> MongoDB

MongoDBでSpringBootを使用する方法

    Spring Bootは、マイクロサービスを作成するためのJavaベースのオープンソースフレームワークであり、開発者はサービスを個別にデプロイおよび開発できます。実行中の各サービスにはプロセスがあり、それによってビジネスアプリケーションをサポートする軽量モデルを実現します。マイクロサービスにはいくつかの利点があります。単純なスケーラビリティ、最小限の構成、短い生産時間、コンテナの互換性、簡単な開発です。

    Spring Bootは、開発者が実行できるスタンドアロンで本番環境に対応したSpringアプリケーションを構築するための優れたプラットフォームを提供します。したがって、スプリング構成全体のセットアップを必要とせずに、最小限の構成で開始できます。

    たとえば、依存関係の管理の処理は、大きなプロジェクトでは複雑です。したがって、Spring Bootは、開発者の便宜のために一連の依存関係を提供することにより、この問題を解決します。 Spring Bootアプリケーションは、アプリケーションの初期化時にすべてのBeanとパッケージ宣言をスキャンします。さらに、Spring Bootアプリケーションの注釈には、コンポーネントスキャン、自動構成、およびSpringBoot構成が含まれます。

    スプリングブートの機能

    以下は、スプリングブートの標準機能の一部です。

    1. 可能な場合は、Springおよびサードパーティのライブラリを自動的に構成します
    2. ビルド構成を簡素化するために、意見の分かれる「スターター」依存関係を提供します
    3. XML構成やコード生成の要件はありません
    4. さらに、外部化された構成メトリックやヘルスチェックなどの本番環境に対応した機能を提供します
    5. Tomcat、Undertow直接、またはJettyが埋め込まれています。したがって、WARファイルをデプロイする必要はありません
    6. また、スタンドアロンのSpringアプリケーションを作成します

    開発者にとってのSpringBootの利点

    1. 生産性が向上します
    2. スプリングアプリケーションの開発と理解が容易になります
    3. 開発時間を短縮します。

    スプリングブーツの目標

    次のように設計されています:

    1. より簡単な方法で、本番環境に対応したSpringアプリケーションを開発します
    2. Springでは複雑なXML構成を避けてください
    3. 開発時間を短縮し、アプリケーションを独立して実行します
    4. アプリケーションを使い始めるためのより簡単な方法を提供します。

    Spring Bootは、次のような機能と利点があるため、より好まれます。

    1. RESTエンドポイントの強力なバッチ処理と管理の提供
    2. データトランザクション、Java Beans j、およびXML構成を構成するためのより柔軟な方法の提供。
    3. 注釈を提供-春のアプリケーションに基づく
    4. 依存関係の管理を簡素化します。組み込みのサーブレットコンテナが含まれています
    5. Spring Bootのすべてが自動構成されているため、手動で構成する必要はありません

    MongoDBは、ソースが利用可能なクロスプラットフォームのドキュメント指向データベースプログラムです。プログラムの高いスケーラビリティと柔軟性を提供するドキュメントデータベースです。さらに、ユーザーに高速なクエリとインデックス作成を提供し、長期的にはパフォーマンスを向上させます。

    MongoDBはNoSQLデータベースプログラムとして分類され、オプションの柔軟なスキーマを備えたJSONのようなドキュメントを使用します。このデータベースは、ソースで利用可能なデータベースの商用サポートを開発および提供するアメリカを拠点とする企業であるMongoDBInc.によって開発されました。 MongoDBは、Server-Side Public License(SSPL)の下でライセンスされています。

    たとえば、MongoDBは継続的なバージョン開発により、機能が継続的に改善されています。

    日付 バージョン 機能メモ 2009年12月 保存されたJavaScript関数 より高速なインデックス作成 コレクションごとのインデックスの追加 設定可能な同期時間 いくつかのマイナーな機能と修正 マップ/リデュース レプリカセット 本番環境に対応したシャーディング IPv6のサポート ハッシュインデックス V8JavaScriptエンジンに切り替えます 拡張された地理空間サポート 拡張テキスト検索 セキュリティの強化 2014年4月8日 クエリエンジンの改善 集約の機能強化 セキュリティの強化 新しい書き込み操作プロトコル テキスト検索の統合 説明機能の改善 プラガブルストレージエンジンAPI WiredTigerストレージエンジンのサポート SCRAM-SHA-1認証 2015年12月8日 レプリケーション選挙の機能強化 ドキュメントの検証 デフォルトでWiredTigerストレージエンジン サーバーをレプリカセットとして構成する V8からスパイダーモンキーに移動 ドキュメントの検証 懸念事項を読む 2018年6月 拡張トランザクション クライアント側のフィールドレベルの暗号化 将来を見据えたバージョン管理されたAPI 時系列サポート
    1.2
    2010年8月 1.6
    2013年3月 2.4
    2.6
    2015年3月3日 3.0
    MongoDB Ops Manager
    3.2
    2016年11月29日 3.4 照合、線形化可能な読み取りの懸念事項とビュー
    4.0
    2021年7月13日 5.0
    ライブリシャーディングでは、オブジェクトシャードのマッピングを変更し、オブジェクトを別のシャードに移動します。

    Spring Bootを使用すると、高速で簡単なスタンドアロンアプリを作成できます(後で説明します)。その使いやすさの結果として、MongoDBは最も人気のあるNoSQLデータベースになりました。 Spring BootとMongoDBを組み合わせることで、迅速、安全、信頼性が高く、開発時間を最小限に抑えることができます。

    この記事では、Spring DataMongoDBAPIを使用してSpringBootとMongoDBを組み合わせる方法を示します。

    MongoDBでSpringBootを使用する方法

    Spring Bootは、自動構成され、組み込みのセキュリティおよびデータベースアクセス機能を提供できるマイクロサービスベースのWebフレームワークです。したがって、Springブートは、構成を変更せずにスタンドアロンアプリケーションをすばやく作成できます。一方、MongoDBは、データを簡単に保存および取得できるため、最も人気のあるNoSQLデータベースです。 Spring BootとMongoDBを組み合わせると、最小限の開発時間を必要とする安全で高速で信頼性の高いアプリケーションが実現します。

    Spring Bootは、本番環境に対応した迅速なアプリケーションを作成します。 MongoDBとSpringBootは、MongoTemplateクラスとMongoRepositoryインターフェースを使用して相互作用します。

    • Mongoテンプレート —すぐに使用できるAPIのセットを実装します。とりわけ、更新集計などの操作に適しています。さらに、Mongo Templateは、カスタムクエリに対してより洗練された制御を提供します。
    • Mongoリポジトリ ドキュメントの表示やデータの作成など、多くのドキュメントフィールドを含む基本的なクエリに使用されます。

    両方のアプローチを使用したSpringBootMongoDB構成には、数行のコードのみが必要です。

    Spring Bootは、MVC(Model-View-Controller)フレームワークに基づくJavaWebアプリケーション用のアプリケーションフレームワークです。その依存性注入は、データベースのセキュリティ、アクセス、初期化などの機能を処理し、開発者がビジネスロジックに集中できるようにします。また、主にREST API用にSpringフレームワーク上に構築されており、必要な構成はごくわずかです。 4つのレイヤーがあります:

    プレゼンテーション層 —MVCフレームワークのビュー部分がフロントエンドを処理します。

    ビジネス層は、すべてのビジネスロジックと検証が行われるコントローラーです。

    永続層 —このレイヤーは、ビジネスオブジェクトをデータベースオブジェクトに変換します。

    データベースレイヤー —実際のCRUD(作成、読み取り、更新、削除)操作。

    MongoDBは、大量の組織化および非構造化データを処理できる高速データベースであり、Webアプリケーションに最適です。 MongoDBは、データをバイナリJSONオブジェクトとして保存します。これにより、データの取得が簡単になります。 Springフレームワークには、MongoDBを使用した効率的なデータベース操作を可能にする堅牢なコネクターが含まれています。

    このSpringBootwith MongoDBサンプルチュートリアルでは、永続性レイヤーとデータベースレイヤーのみに関心があります。統合開発環境(IDE)を介してソフトウェアを実行し、CRUD操作に重点を置きます。 Spring BootとMongoDBを接続するために、SpringBootMongoDB構成を追加します。

    この例で作成するもの

    架空のユーザーの食料品の買い物リストを作成しましょう。次の手順を実行します。

    1. Springアプリケーションでは、ID、名前、数量、およびカテゴリを使用して、食料品アイテムのPlain Old Java Object(POJO)を定義します。
    2. その後、MongoRepositoryのパブリックインターフェイスを介して、作成、読み取り、更新、削除(CRUD)アクションを実行します。
    3. 最後に、MongoTemplateクラスを利用してドキュメントを変更する別の方法を示します。

    前提条件

    必要なもの:

    • Cluster MongoDB Atlas(まだアカウントをお持ちでない場合は、次のフェーズに進む前に無料でサインアップしてください)。
    • Spring Initializr
    • Java 1.8
    • Maven(Eclipseの[ヘルプ]-> [新しいソフトウェアのインストール]に移動してMavenをインストールします)。
    • 統合開発環境(IDE)は、重要なライブラリと依存関係をインポートします。このプロジェクトの図にはEclipseが使用されます。

    まず、SpringInitializrを使用して次の設定でSpringBootプロジェクトを作成します。

    プログラミング言語としてJava(8)を使用し、バージョンとしてSpringBoot2.5.3を使用するMavenProjectを選択します。さらに、SpringWebとSpringDataMongoDBの依存関係を追加します。 Spring Webは、Apache Tomcatサーバー、Spring MVC、およびRESTをアプリケーションに統合して、すべての一般的な依存関係の管理を一元化します。

    Spring Data MongoDBの依存関係を利用して、このアプリケーションのMongoDBAtlasクラスターからデータにアクセスします。

    プロジェクトのメタデータを入力し(上記のように)、JARオプションを選択します。 Spring Initializrはpom.xmlファイルの作成を管理し、Mavenはpom.xmlを介して必要な依存関係をダウンロードします。

    これで設定の準備は完了です。その後、[生成]ボタンをクリックして、SpringBootプロジェクトのブートストラップに必要なすべてのファイルを生成できます。その後、ブラウザは自動的にZIPファイルのダウンロードを開始します。

    ZIPファイルをダウンロードした後、プロジェクトを解凍します。 IDEから、プロジェクトを開きます。次のようなプロジェクト構造の例を見ることができます:

    ご覧のとおり、追加した依存関係は、pom.xmlファイルにartifactIdとして含まれています:

    src / main/javaサブディレクトリにコンテンツを入力します。

    MongoDBモデルの実装

    ここでは、POJOまたはGroceryItemクラスがモデルとして機能します。

    「com.example.mdbspringboot.model」という名前のパッケージを作成し、その中にGroceryItem.javaクラスを含めます。

    アノテーション@Documentは、モデルが使用するコレクション名を指定するために使用されます。コレクションがまだ存在しない場合、MongoDBはコレクションを作成します。

    Eclipse Source-> Generate Getters and Settersオプションを使用して、このコードのゲッターとセッターを生成できます。まず、@ Idアノテーションを利用して、MongoDBドキュメントの主キー_idを指定します。何も指定しない場合、MongoDBはドキュメントの作成時に自動的に_idフィールドを生成します。

    SpringBootでのMongoDBAPIの実装

    リポジトリは、APIが実装される場所です。データベースとモデルの間のブリッジとして機能し、すべてのCRUDアクティビティへのアクセスを提供します。

    「com.example.mdbspringboot.repository」という名前のパッケージを作成して、すべてのリポジトリファイルを含めます。

    MongoRepositoryインターフェイスを拡張するItemRepositoryのパブリックインターフェイスを作成します。

    最初のアプローチであるfindItemByNameには、クエリをフィルタリングするフィールドを指定するクエリ引数が必要です。これは、アノテーション@Queryを使用して指定されます。 2番目の手法では、カテゴリフィールドを利用して、特定のカテゴリに属する​​すべてのオブジェクトを取得します。クエリの回答に投影されるフィールドの名前と番号のみが必要です。したがって、これらのフィールドを1に設定します。現在の状態でメソッドcount()を再適用します。

    SpringBootCRUDを使用したMongoDBの例

    これで、Springアプリケーションを開発し、メソッドをテストする準備が整いました。

    MongoDB Atlasにリンクするには、src / main/resourcesフォルダーのapplication.propertiesファイルで接続文字列を定義します。クラスタの接続文字列には、AtlasUIでアクセスできます。接続関連のコードを含めるために他のファイルは必要ありません。 Spring Bootは、私たちに代わってデータベース接続を管理します。

    さらに、ここでデータベース名を指定します。データベースが存在しない場合は、MongoDBがデータベース名を作成します。

    このSpringBootMongoDBサンプルでは、​​コントローラーまたはビューを使用していません。代わりに、コンソールで出力を表示するために、CommandLineRunnerを利用します。

    com.example.mdbspringbootルートパッケージにMdbSpringBootApplication.javaメインクラスを作成します。

    Springアプリケーションを実行するために、クラスMdbSpringBootApplicationはCommandLineRunnerインターフェイスを使用します。 ItemRepositoryは自動配線されています。つまり、Springは自動的にそれを検出します。 @SpringBootApplicationアノテーションは、アプリケーションコンテキストを初期化するために使用されます。さらに、@EnableMongoRepositoriesを使用してMongoリポジトリを有効にします。プロジェクトの構造は次のようになります。

    それでは、CRUD操作に使用されるメインクラスにリポジトリ操作を追加しましょう:

    MongoDBのスプリングブート操作を作成する

    保存機能を使用して、新しいドキュメントを作成します。 MongoRepositoryプロトコルを使用するSimpleMongoRepositoryクラスを介してsaveメソッドにアクセスできます。 ItemRepositoryインターフェースは、MongoRepositoryのItemRepositoryインターフェースを拡張します。

    saveメソッドは、タイプGroceryItemのパラメーターを受け入れます。このセクションでは、5つの食料品(ドキュメント)を作成し、保存機能を使用してそれらをMongoDBに保存します。

    SpringBootMongoDB読み取り操作

    このアプリケーションでは、4つの異なる読み取り操作を実行しています。

    findAll()関数を使用して、すべてのドキュメント(食料品)を取得します。

    findItemByName関数は、名前フィールドに基づいて単一のアイテム(ドキュメント)を返します。

    カテゴリ別に整理されたオブジェクトのリストを取得します。

    オブジェクトの総数を計算します。

    読み取り操作の結果をフォーマットするヘルパー関数を設計できます:

    MongoDBSpringBootの更新操作

    考えを変えて、食料品リストの「スナック」よりも「マンチ」という用語を好むと仮定します。カテゴリ「スナック」を含むドキュメントを更新する必要があります。これを実現するには、まず「スナック」カテゴリに属する​​すべての論文を取得し、カテゴリを「マンチ」に変更してから、すべてのドキュメントを保存する必要があります。

    MongoDBSpringBootの削除操作

    カテゴリやアイテムを変更する代わりに、リストから食料品アイテムを削除したい場合があります。事前定義されたdeleteById関数を使用して、特定のIDを持つ食料品を削除する場合があります。

    groceryItemRepo.deleteAll();を使用できます。すべてのアイテムを削除する機能。コレクション内のすべてのドキュメントを削除しても、それらは削除されません。

    CRUD操作のアセンブル

    その後、CommandLineRunnerを実装します。上記のメソッドを呼び出すには、run()メソッドを使用します。

    system.outステートメントは、出力の外観を向上させるために使用されます。

    ソフトウェアを実行すると、次の出力が期待されます。

    MongoTemplateと組み合わせたMongoDBSpringBootの更新機能

    さらに、MongoTemplateクラスを利用して、特定のフィールドに対して更新アクションを実行できます。これには、org.springframework.data.mongodb.core.queryパッケージのデフォルト機能が含まれています。大量のコードを記述する必要はなく、単一のデータベースクエリで更新を実行できます。 MongoTemplateは、集計などのより複雑なプロセスにも使用できます(このガイドの範囲外です)。

    MongoTemplateというクラスを使用する前に、カスタムリポジトリを作成する必要があります。ここで、更新のクエリが作成されます。

    スーパーマーケットの商品の数量を更新するメソッドを作成する方法を説明させてください。

    インターフェイスCustomItemRepositoryを構築します:

    必要な数のメソッドを使用してインターフェイスを拡張し、CustomItemRepositoryImplクラスの例を提供できます。

    MongoTemplateは@Autowiredであるため、Springはオブジェクトの依存関係をインポートします。さらに、@ Componentアノテーションにより、SpringはCustomItemRepositoryインターフェースを検出できます。

    次の手順は、メインクラス内からこの関数を呼び出すことです。 groceryItemRepoと同様に、customRepoを次のように定義する必要があります。

    次に、メインクラスで、customRepo関数を呼び出す次のメソッドを作成します。

    次のメソッドをrunメソッドに追加して、プログラムの実行時に呼び出されるようにします。

    次の結果が得られるはずです:

    前述のように、MongoRepositoryの代わりに、単一のデータベーストランザクションで変更を実行できました。これには、検索、設定、および保存の3つのアクションが必要でした。 MongoTemplateには、複数のドキュメントを同時に更新できるupdateMulti()メソッドも含まれています。

    結論

    この記事では、MongoDBをSpringBootと統合することがいかに簡単であるかを示しました。 MongoDBAtlasに接続するために他のコードは必要ありません。 MongoDB Atlasは、任意の場所からデータを保存およびアクセスするための使いやすいインターフェースを提供します。この簡単なチュートリアルを完了すると、MongoDBでSpringBootを使用する方法を理解できたと思います。問題が発生した場合は、コメントセクションからサポートを受けてください。読んでくれてありがとう。


    1. リモートRedisサーバーに接続するにはどうすればよいですか?

    2. MongoDBは、オブジェクトの配列内のデータを結合します

    3. ServiceStackRedisクライアントでの検証によるトランザクション作成

    4. リアルタイムアプリケーションの初心者-Node.JS+RedisまたはRabbitMQ->クライアント/サーバーどのように?