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

简介: 可以将Spring Boot与Tomcat、tc-server、Jetty或者Undertow结合使用。服务器可以很容易地进行替换,只需将spring-boot-starter-tomcat JAR依赖移除掉,并将其替换为Jetty或Undertow对应的依赖即可。
+关注继续查看

本节书摘来自异步社区《精通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即可。

相关文章
|
7月前
|
开发框架 运维 前端开发
NET MVC接口服务如何运行在容器中
有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便迁移和运维最好是Docker容器中运行。
82 0
|
8月前
|
前端开发 Java 网络架构
「推荐收藏!」【Spring源码探究】(一)MVC容器初始化🏅彻底让你明白运行原理和源码流程
「推荐收藏!」【Spring源码探究】(一)MVC容器初始化🏅彻底让你明白运行原理和源码流程
67 0
|
8月前
|
前端开发 Java 容器
【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理
【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理
73 0
【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理
|
8月前
|
前端开发 Java 数据库连接
Spring MVC框架:第十五章:多IOC容器整合
Spring MVC框架:第十五章:多IOC容器整合
87 0
Spring MVC框架:第十五章:多IOC容器整合
|
10月前
|
XML 前端开发 Java
Spring MVC 父子容器是什么?这篇文章讲清楚了
Spring MVC 父子容器是初学 Spring MVC 时最先接触到 Spring 知识点之一,还记得我刚工作那会,项目基础架构是其他同事搭建的,其中就用到了 Spring MVC 中的父子容器,还把 Spring MVC 中的不同层拆成了不同的 maven 模块。这里暂不讨论这种模块拆分方式的优劣,Spring 为什么设计出具有层次结构的容器呢?Web 环境中什么场景会用到这种具有层次结构的容器?
189 0
Spring MVC 父子容器是什么?这篇文章讲清楚了
|
10月前
|
前端开发 Java 应用服务中间件
Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part B)
Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part B)
Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part B)
|
10月前
|
前端开发 Java 应用服务中间件
Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part A)
Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part A)
Spring 全家桶之 Spring Boot 2.6.4(八)- 嵌入式 Servlet 容器(Part A)
|
JSON 前端开发 Java
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(下)
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(下)
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(下)
|
JSON 前端开发 Java
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(中)
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(中)
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(中)
|
JSON 前端开发 安全
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(上)
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(上)
【小家Spring】Spring MVC容器的web九大组件之---ViewResolver源码详解---视图View详解(上)
相关产品
容器镜像服务
容器服务Kubernetes版
推荐文章
更多