SpringBootはどのように自動設定Tomcatの組み込み?
どのように我々は、組み込みのTomcatのデフォルトのパラメータを変更しますか?
これら二つの質問では、我々は、組み込みの自動設定、原則としてTomcatのSpringBoot下で分析しました
私たちは、春・ブート自動構成-xx.RELEASE.jarパッケージに含まれていSpringBoot自動設定を知っています。
一方のSpringBootサポートサーブレットWebサーバの実装は、抽象モデリングありません。
サーブレットコンテナ型 | WebServerのモデルインターフェイス | WebServerの工場実装クラス |
Tomcatの | TomcatWebServer | TomcatServletWebServerFactory |
桟橋 | JettyWebServer | JettyServletWebServerFactory |
引き | UndertowWebServer | UndertowServletWebServerFactory |
このコンセプトモデルに基づいて、Webアプリケーションの種類には、Springbootの用途はウェブは、インスタンスのWebサーバに対応する植物成分を形成するように言いました。Webコンポーネントは自動的にクラスServletWebServerFactoryAutoConfiguarationタスクが自動的に植物成分のWeb設定を生成するように構成され、工場から来ます。
@Configuration @AutoConfigureOrder( -2147483648 ) @ConditionalOnClass({のServletRequest。クラス}) @ConditionalOnWebApplication( タイプ = Type.SERVLET ) @EnableConfigurationProperties({ServerProperties。クラス}) @import({ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar。クラス、EmbeddedTomcat。クラス、EmbeddedJetty 。クラス、EmbeddedUndertow。クラス}) パブリック クラスServletWebServerFactoryAutoConfiguration { パブリックServletWebServerFactoryAutoConfiguration(){ } @Bean 公衆ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(ServerProperties serverProperties){ リターン 新しいServletWebServerFactoryCustomizer(serverProperties)。 } @Bean @ConditionalOnClass( 名 = { "org.apache.catalina.startup.Tomcat" } ) パブリックTomcatServletWebServerFactoryCustomizer tomcatServletWebServerFactoryCustomizer(ServerProperties serverProperties){ リターン 新しいTomcatServletWebServerFactoryCustomizer(serverProperties)を、 } パブリック 静的の クラス BeanPostProcessorsRegistrarの実装ImportBeanDefinitionRegistrar、BeanFactoryAware { プライベートConfigurableListableBeanFactoryたBeanFactory。 パブリックBeanPostProcessorsRegistrar(){ } 公共 ボイド setBeanFactory(たBeanFactoryたBeanFactory)はスローBeansException { 場合(たBeanFactory のinstanceof ConfigurableListableBeanFactory){ この .beanFactory = (ConfigurableListableBeanFactory)たBeanFactory。 } } 公共 ボイドregisterBeanDefinitions(AnnotationMetadata importingClassMetadata、BeanDefinitionRegistryレジストリ){ もし(これ!.beanFactory = ヌル){ この .registerSyntheticBeanIfMissing(レジストリ、 "webServerFactoryCustomizerBeanPostProcessor"、WebServerFactoryCustomizerBeanPostProcessor。クラス); この .registerSyntheticBeanIfMissing(レジストリ、 "errorPageRegistrarBeanPostProcessor"、ErrorPageRegistrarBeanPostProcessor。クラス); } } プライベート 無効 registerSyntheticBeanIfMissing(BeanDefinitionRegistryレジストリ、文字列名、クラス<?> たbeanClass){ 場合(ObjectUtils.isEmpty(この .beanFactory.getBeanNamesForType(たbeanClass、真、偽))){ RootBeanDefinition beanDefinition = 新しいRootBeanDefinition(たbeanClass)。 beanDefinition.setSynthetic(真の); registry.registerBeanDefinition(名前、beanDefinition)。 } } } }
このServletWebServerFactoryAutoConfigurationを初めて目には、自動的にいくつかの注意事項クラスを設定します。
条件2は、現在の動作環境は、Webサーブレットサービス標準に基づいていることを示していますConditionalOnClass(ServletRequest.class):現在はConditionalOnWebApplication(タイプ= Type.SERVLET)サーブレットAPIに依存し存在しなければならないことを示し:唯一のサーブレットベースのWebアプリケーション
このローディングシーケンス@AutoConfigureOrder 1は、決定されたアノテーションの設定クラス、小さい値であるときに第一負荷のアノテーション
2. @ EnableConfigurationProperties開いた構成属性値ServerPropertiesクラス。そして、これはWebサーバの設定が含まれているクラスがあります
内部クラスBeanPostProcessorsRegistrarは、このカテゴリは2つのBeanを登録3. @import:
WebServerFactoryCustomizerBeanPostProcessorとErrorPageRegistarBeanPostProcess。この後に、より多くの豆との両方の役割
4. @インポートEmbeddedTomcatクラス
@Configuration @ConditionalOnClass({サーブレット。クラス、のTomcat。クラス、UpgradeProtocol。クラス}) @ConditionalOnMissingBean( 値 = {ServletWebServerFactory。クラス}、 検索 = SearchStrategy.CURRENT ) パブリック 静的 クラスEmbeddedTomcat { パブリックEmbeddedTomcat(){ } @Bean 公衆TomcatServletWebServerFactory tomcatServletWebServerFactory(){ リターン 新しいTomcatServletWebServerFactory()。 } }
このクラスは、関連のjarパッケージのtomcat TomcatServletWebServerFactory Beanの存在に追加されます
また5、さらに注射
ServletWebServerFactoryCustomizer和TomcatServletWebServerFactoryCustomizer