web-dev-qa-db-ja.com

複数のSpring Bootアプリケーションを1つのアプリケーションにラップする方法

私は古いソリューション用の新しいWebアプリケーションバージョンを開発しているチームで働いていますが、いくつかの革新的なアイデアもあります。フロントエンドでAngular、バックエンドでJava、データベースにMongoDBを使用し、Spring Boot経由で実行しています。

現在、2つのアプリケーションが完成しており、さらに開発中です。ここで、それらを分離して実行します。これらは、非常に特定の目的で異なるポートで実行される異なるアプリケーションです。唯一の例外は、ある種のユーザビリティパターンを維持するために少し一生懸命に設計したことです。

しかし、私たちは現在、ますます未来を見つめ、各アプリケーションの目標が非常に具体的であることに加えて、実際にすべてを包み込むことができるより大きな製品を構成していることを認識しています。

私たちが今計画していることは非常に簡単に説明できるかもしれませんが、アプリケーションを統合するための正しい道にいることを確認するために、それについてもっと読みたいと思います。基本的には、ログに記録されたユーザー権限に基づいて、利用可能なすべてのアプリケーションを表示するメニューを上に固定することを検討できます。その後、彼/彼女が1つを選択すると、フローは、個別に実行しているときに選択したアプリケーション内と同じになります(ただし、メニューは変わりません)。

誰かが何か推奨事項、またはこれを適切な方法で構築するのに役立つ可能性があるものはありますか? (物事を統合する方が将来よりも簡単になるため)

8
Patrick Bard

そうする理由は確かにあると思いますが、ビジネスニーズによっては、ソリューションがまったく異なる場合があります。検討できる2つのオプションを次に示します。

  1. アプリのコンテナ化。各アプリをdockerコンテナーに配置し、docker-composeを使用して同じサーバーで同時に両方を実行します。 APIゲートウェイまたはプロキシを使用して、単一のエントリポイント経由で両方のサービスを公開できます。主な利点は、必要に応じて複数のサーバーに拡張でき、アプリケーションコードに手を加える必要がなく、モジュール性を維持できることです。

  2. プラグインアーキテクチャ。 Springの構成にいくつかの変更を加えると、元のアプリをプラグインとして扱い、いくつかのAPIを実装できます。プラグイン設定をいくつかの一般的なクラスパスフォルダーに配置します。 /META-INF/plugins/pluginN.xmlなので、ホストアプリで見つけられます。クラスパスで構成を検索して、Spring DI経由でプラグインをロードするHost Spring Bootアプリを作成します。プラグインは、リクエストマッピングをホストアプリのWebMVC構成に提供し、機能の一部を公開します。長所:a)モジュール性を維持します。 b)サーバーでの画像サイズとメモリ/ CPU使用量が小さい。欠点:Springの構成とプラグインのアーキテクチャについて慎重に考える必要があります。 「マイクロサービスアーキテクチャ」の意味ではスケーラブルではありません(すべてを実行する単一のアプリとして複数のマシンにデプロイできます)。

2
Ivan Gammel

うーん、ダメ。あなたが望まない限り、彼らは「より大きなアプリケーション」を構成しません。

あなたはMicrosoft Officeの道を進んでいます。あなたはモノリスを作ることを考えています。これはビジネス上の決定です。あなたが判断される1つ。それはより良いデザインとは何の関係もありません。

優れた設計と関係があるのは、あなたが言及した統合です。一律のユーザーエクスペリエンスを提供するために一生懸命努力することは良いことです。それらを連携させるのは良いことです。これがまさにUNIXコマンドラインツールです。彼らは一緒に働きます。彼らは彼らと対話するための統一された方法を持っています。それらは一枚岩ではありません。彼らは一緒にうまく機能する多くの小さなツールです。それらは統合されています。

モノリスを細かくしたい場合。ただし、それがアプリケーションを連携させる唯一の方法であると主張しないでください。それは独立した選択です。

それらがマーケティングにどの程度うまく統合されているかを示す方法が単に必要な場合は、アイコンに一貫したテーマを与えるだけです。

0
candied_orange

複数のSpring Bootアプリケーションをラップすることは解決策ではないようです。単一のコンテナーが必要な場合は、アプリケーションをwarファイルとしてビルドし、それらを単一のコンテナーにデプロイします。

別のレイヤーにアクセスするためにコンテナーにコールバックするという問題が解決しない場合があります。特定のモジュールをライブラリとしてパッケージ化し、直接使用することができます。あなたはすでに分離されたモジュールを開発したでしょう、そのインターフェースを使用することによってそれをそのように保ちます。

0
BillThor