閱讀243 返回首頁    go 技術社區[雲棲]


《精通Spring MVC 4》——1.8 嵌入式Servlet容器(Tomcat)的配置

本節書摘來自異步社區《精通Spring MVC 4》一書中的第1章,第1.8節,作者:【美】Geoffroy Warin著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

1.8 嵌入式Servlet容器(Tomcat)的配置

默認情況下,Spring Boot在打包和運行應用時,會使用Tomcat嵌入式API(Tomcat embedded API)。

我們來看一下EmbeddedServletContainerAutoConfiguration:

@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@ConditionalOnWebApplication
@Import(EmbeddedServletContainerCustomizerBeanPostProcessorRegistrar.
class)
public class EmbeddedServletContainerAutoConfiguration {

  /**
  * Nested configuration for if Tomcat is being used.
  */
  @Configuration
  @ConditionalOnClass({ Servlet.class, Tomcat.class })
  @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.
class, search = SearchStrategy.CURRENT)
  public static class EmbeddedTomcat {

    @Bean
    public TomcatEmbeddedServletContainerFactory
tomcatEmbeddedServletContainerFactory() {
      return new TomcatEmbeddedServletContainerFactory();
    }
  }
  /**
  * Nested configuration if Jetty is being used.
  */
  @Configuration
  @ConditionalOnClass({ Servlet.class, Server.class, Loader.class })
  @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.
class, search = SearchStrategy.CURRENT)
  public static class EmbeddedJetty {

    @Bean
    public JettyEmbeddedServletContainerFactory
jettyEmbeddedServletContainerFactory() {
      return new JettyEmbeddedServletContainerFactory();
    }
  }
  /**
  * Nested configuration if Undertow is being used.
  */
  @Configuration
  @ConditionalOnClass({ Servlet.class, Undertow.class,
SslClientAuthMode.class })
  @ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.
class, search = SearchStrategy.CURRENT)
  public static class EmbeddedUndertow {

    @Bean
    public UndertowEmbeddedServletContainerFactory
undertowEmbeddedServletContainerFactory() {
      return new UndertowEmbeddedServletContainerFactory();
    }
  }
}

上麵的代碼非常簡單直接,這個代碼包含了3個不同的配置,哪一個會處於激活狀態要取決於類路徑下哪些內容是可用的。

可以將Spring Boot與Tomcat、tc-server、Jetty或者Undertow結合使用。服務器可以很容易地進行替換,隻需將spring-boot-starter-tomcat JAR依賴移除掉,並將其替換為Jetty或Undertow對應的依賴即可。如果你想這樣做的話,請參考相關的文檔。

對Servlet容器(Tomcat)的所有配置都會在TomcatEmbeddedServletContainerFactory中進行。盡管你應該讀一下這個類,它為嵌入式Tomcat提供一個非常高級的配置(為其查找文檔會非常困難),但是在這裏我們不會直接查看這個類。

我會為讀者介紹配置Servlet容器時不同的選項。

1.8.1 HTTP端口
通過在application.properties文件中定義server.port屬性或者定義名為SERVER_PORT的環境變量,我們可以修改默認的HTTP端口。

通過將該變量設置為−1,可以禁用HTTP,或者將其配置為0,這樣的話,就會在隨機的端口上啟動應用。對於測試,這是很便利的。

1.8.2 SSL配置
配置SSL是一項很麻煩的事情,但是Spring Boot有一項很簡單的解決方案。我們隻需一點屬性就能保護服務器了:

server.port = 8443
server.ssl.key-store = classpath:keystore.jks
server.ssl.key-store-password = secret
server.ssl.key-password = another-secret

不過,為了使上麵的例子運行起來,我們需要生成一個keystore文件。

我們將會在第 6 章中,深入介紹安全的可選方案。當然,我們還可以通過添加自己EmbeddedServletContainerFactory來進一步自定義TomcatEmbeddedServletContainerFactory的功能。
1.8.3 其他配置
在配置中,我們可以通過簡單地聲明@Bean 元素來添加典型的 Java Web 元素,如Servlet、Filter和ServletContextListener。

除此之外,Spring Boot還為我們內置了3項內容:

在JacksonAutoConfiguration中,聲明使用Jackson進行JSON序列化;
在HttpMessageConvertersAutoConfiguration中,聲明了默認的HttpMessageConverter;
在JmxAutoConfiguration中,聲明了JMX功能。
我們將會在第5章中,更詳細地了解Jackson的配置。關於JMX配置,我們可以在本地通過jconsole連接應用之後進行嚐試,如圖1-9所示。

screenshot

圖1-9

通過將org.springframework.boot:spring-boot-starter-actuator添加到類路徑下,我們可以添加更多有意思的MBean。我們甚至可以定義自己的MBean,並通過Jolokia將其暴露為HTTP。另一方麵,我們也可以禁用這些端點,隻需在配置中添加spring.jmx.enabled=false即可。

最後更新:2017-05-27 15:01:44

  上一篇:go  《精通Spring MVC 4》——1.9 小結
  下一篇:go  《精通Spring MVC 4》——1.7 錯誤與轉碼配置