暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spring Boot如何使用内嵌式的Tomcat?(下)

Alleria Windrunner 2021-09-14
391
之前两篇我们已经介绍完了Spring Boot启动内嵌式Tomcat的基本原理以及Spring Boot的具体实现,最后这篇我们再一起思考一个问题:那就是如何在 Spring Boot 中定制 Web 容器?


Web 容器的定制

在 Spring Boot 2.0 中,我们可以通过两种方式来定制 Web 容器。
第一种方式是通过通用的 Web 容器工厂 ConfigurableServletWebServerFactory,来定制一些 Web 容器通用的参数:
    @Component
    public class MyGeneralCustomizer implements
    WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    public void customize(ConfigurableServletWebServerFactory factory) {
    factory.setPort(8081);
    factory.setContextPath("/hello");
    }
    }


    第二种方式是通过特定 Web 容器的工厂比如 TomcatServletWebServerFactory 来进一步定制。下面的例子里,我们给 Tomcat 增加一个 Valve,这个 Valve 的功能是向请求头里添加 traceid,用于分布式追踪。TraceValve 的定义如下:
      class TraceValve extends ValveBase {
      @Override
      public void invoke(Request request, Response response) throws IOException, ServletException {


      request.getCoyoteRequest().getMimeHeaders().
      addValue("traceid").setString("1234xxxxabcd");


      Valve next = getNext();
      if (null == next) {
      return;
      }


      next.invoke(request, response);
      }


      }
      跟第一种方式类似,再添加一个定制器,代码如下:
        @Component
        public class MyTomcatCustomizer implements
        WebServerFactoryCustomizer<TomcatServletWebServerFactory> {


        @Override
        public void customize(TomcatServletWebServerFactory factory) {
        factory.setPort(8081);
        factory.setContextPath("/hello");
        factory.addEngineValves(new TraceValve() );
        }
        }
        好了,到此关于Spring Boot对于内嵌式Tomcat容器的支持就介绍完了。

        文章转载自Alleria Windrunner,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论