2017-06-28 11 views
2

私はSpringブートでWebアプリケーションを開発し、Windows上で動作するTomcat 8.5に展開します。私が直面している問題は、アプリがリロードする必要がある場合、CatalinaチェックのためにTomcatが定期的に非常に高いCPU負荷を発生させるということです。 Tomcat 8 documentationによれば、reloadableフラグがあり、この動作を無効にするアプリケーションではfalseに設定できます。ここで(強調は私です)ドキュメントが言っていることだ:SpringブートアプリケーションでTomcatの "reloadable"フラグを設定するには?

あなたはカタリナが変更 /WEB-INF /クラス/と/ WEB-INF/libにクラスを監視したい場合はtrueに設定すると、自動的に リロード変更が検出された場合はWebアプリケーション。この機能はアプリケーション開発中に非常に便利ですが、 ランタイムオーバーヘッドが必要で、 デプロイされた本番アプリケーションでの使用はお勧めしません。ただし、マネージャWeb アプリケーションを使用して、 要求にデプロイされたアプリケーションのリロードをトリガーすることができます。

NOTE - このプロパティの値は、あなたが周囲のコンテキストコンポーネントに設定 リロード属性から継承されます、そしてあなたはここで明示的に設定 任意の値が置き換えられます。

質問です:私は春ブーツにfalseに、この特定のreloadableフラグを設定するのですか?好ましくは手動で作成されたMETA-INF/context.xmlに頼らずに、設定用のアノテーションを使用しています。

答えて

4

あなたはEmbeddedServletContainerCustomizer

@Bean 
public EmbeddedServletContainerCustomizer containerCustomizer() { 
    return new EmbeddedServletContainerCustomizer() { 
     @Override 
     public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) { 
      if (configurableEmbeddedServletContainer instanceof TomcatEmbeddedServletContainerFactory) { 
       ((TomcatEmbeddedServletContainerFactory) configurableEmbeddedServletContainer).addContextCustomizers(
         new TomcatContextCustomizer() { 
          @Override 
          public void customize(Context context) { 
           context.setReloadable(false); 
          } 
         } 
       ); 
      } 
     } 
    }; 
} 
+0

感謝を作成することによって、これを達成することができるはず!私は、埋め込まれた部分についてちょっと心配しています。通常のTomcatで動作していても動作しますか? – Alan47

+1

いいえ、これはSpringブートが従来のデプロイ*と呼ぶものに対しては機能しません。純粋な実行不可能なWARパッケージを作成している場合は、 'META-INF/context.xml'ファイルを使用して古風な方法でコンテキストをカスタマイズする必要があります。 – Strelok

+0

私は参照してください。解明してくれてありがとう!私は 'context.xml'に固執します。 – Alan47

関連する問題