博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《精通Spring MVC 4》——1.8 嵌入式Servlet容器(Tomcat)的配置
阅读量:7166 次
发布时间:2019-06-29

本文共 3209 字,大约阅读时间需要 10 分钟。

本节书摘来自异步社区《精通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 TomcatEmbeddedServletContainerFactorytomcatEmbeddedServletContainerFactory() {      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 JettyEmbeddedServletContainerFactoryjettyEmbeddedServletContainerFactory() {      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 UndertowEmbeddedServletContainerFactoryundertowEmbeddedServletContainerFactory() {      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 = 8443server.ssl.key-store = classpath:keystore.jksserver.ssl.key-store-password = secretserver.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即可。

转载地址:http://nsxwm.baihongyu.com/

你可能感兴趣的文章