ホームページ  >  記事  >  Java  >  SpringBootの起動が遅い原因は何でしょうか?

SpringBootの起動が遅い原因は何でしょうか?

WBOY
WBOY転載
2023-05-17 11:01:263825ブラウズ

    SpringBoot の起動が遅い理由

    Spring Boot のアーキテクチャは非常に一般的であるため、マスターしていないと恥ずかしくなることがあります。あなたが Java の仕事に従事していること。しかし、火は火に戻るので、注意が必要な小さな問題がいくつかあります。

    これが単一のプロジェクトであり、起動速度に関する要件がない場合は、無視してください。

    以下のトピックに入ります。どのような状況下では、Spring Boot プロジェクトの開始が遅くなりますか?

    Prerequisites

    プロジェクトを開始するためのマシンのハードウェア構成を遅らせることはできません。プロジェクトは起動が遅く、プロジェクトはまだマシンが良くないように感じます... たとえば、ネットワーク、メモリ サイズ、CPU コアの数など。要件はそれほど高くありません。少なくとも、十分なはずです。

    接続時間が長い、他のコンポーネントの起動が遅いなどのあらゆる種類の人為的要因は待機につながります...

    原因 1

    プロジェクトで使用されている無駄な構成が多すぎます。たとえば、最も単純な Web では、他のさまざまな Maven 構成も追加してプロジェクトに構成した場合 (これは単なる誇張された例であり、これらの構成は必要ありません)、プロジェクト自体はそれを認識しません。 、ロードします。

    1 個は 0.1 秒、10 個は 1 秒、100 個は 10 秒...というように、これが最も理解しやすいです。

    理由 2

    スプリング ブートの自動構成。自動構成は Spring Boot のハイライトですが、起動時間が遅くなる欠点でもあります。

    まさか、使いやすくて機能が充実しているものは、必ずどこかに欠陥があるものです。

    上で述べたように無駄な構成が多いのですが、ここで言いたいのは Spring Boot は単体で組み立てるものが多すぎるということです。

    spring.factories ファイルが Spring Boot の関連する jar パッケージに保存されていることがわかります。内部を見ると、そのほとんどが自動アセンブリを実装する多くのクラスを記述していることがわかります。スプリングブーツの核の一つ。

    しかし、注意深く見てみると、まったく使用しない可能性のあるカテゴリが実際にはたくさんあることがわかります。

    しかし、何ができるでしょうか? 使用するかどうかに関係なく、少なくともチェックはしてくれます。ここは時間を過ごす場所ではないでしょうか?

    理由 3

    プロジェクトが十分に合理化されていません。マイクロサービスという概念は今かなり普及していますが、その中心的な意味は単純さ、単純さだと思いますが、起動速度を重視する必要がある場所はほとんどがマイクロサービスプロジェクトにあると思います。

    マイクロサービス プロジェクトでは、10 秒以内に開始するのが最善です。しかし、プロジェクトが十分に細分化されていないために、それができない人がほとんどです。

    1 つのインターフェイスを起動するのが速いのか、10 のインターフェイスを起動するのが速いのか、あるいはそれ以上のインターフェイスを起動するのが速いのか、答えは明らかです。多くのプロジェクトは大規模で包括的です。いわゆる大規模で包括的とは、多くの機能、完全な構成、さまざまな拡張可能な構成などが存在することを意味します。包括的ではないかもしれませんが、これは何を意味しますか? 多くの構成があります。役に立つかどうかは問題ではありません。少なくとも、コンパイルしてロードする必要があるクラス ファイルはさらに多くなります。そのようなプロジェクトをすぐに開始したいとおっしゃいましたが、どうすればすぐに開始できるでしょうか?

    解決策

      mavenに無駄な依存関係が多すぎるかどうかを確認してください
    • これはより複雑です。spring-bootを使用してください。 maven プラグインのデバッグを開始し、プロジェクトでどの構成が使用されているか、どの構成が役に立たないかを確認してから、使用されているクラスのみが開始されることをスタートアップ クラスで直接指定し、@SpringBootApplication アノテーションを削除して、@ を手動で入力します。設定および @Import アノテーションを追加し、それらの設定済みクラスを @Import アノテーションに追加します。
    • 一部の依存関係をより高速な構成に置き換えます。たとえば、フル機能と多くの構成を備えた A データベース接続プールを使用するとしますが、実際には B 接続プールもプロジェクトのニーズを満たすことができますが、機能が比較的少ないため、構成が少なく高速になります。 A と B のいずれかを選択してください。
    • より合理化されたプロジェクトを分割して、独立して実行します。大規模で包括的とは、より多くはあるが洗練されていないことを意味し、無駄がなくシンプルとは、それほどではないが熟練していることを意味します。そのスピードは自明のことです。
    • SpringBoot アプリケーションの起動速度を向上させる方法

    @ComponentScan および @SpringBootApplication スキャン クラスの範囲を狭める

    2. Spring Boot の起動速度をオフにします。 JMX モニタリング。 spring.jmx.enabled=false

    3 を設定します。JVM パラメータ -noverify を設定し、クラスを検証しません。

    4. 必ずしもロードされるとは限らない Bean のロードを遅延します。スタートアップ

    5. Spring Boot のグローバルな遅延読み込みを使用します

    #6. AOP の側面にはアノテーションを使用しないようにしてください。これにより、起動時にすべてのメソッドがスキャンされることになります

    ##7。一部のエンドポイント監視機能をオフにする

    8. プロジェクトの不要な jar 依存関係を除外する

    #9. Swagger がインターフェイスをスキャンするときに、特定のパスの下のクラスのみをスキャンするように指定します

    10. Feign クライアント インターフェイスのシュリンク パッケージをスキャンする スキャン範囲

    以上がSpringBootの起動が遅い原因は何でしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。