[springboot]嵌入式tomcat容器的运行参数配置(含视频)

在这里插入图片描述

在Spring Boot项目中,可以支持Tomcat、Jetty、Undertow的Web应用服务容器。当我们添加了spring-boot-starter-web依赖后,默认会使用Tomcat作为嵌入式Web容器,不需要我们单独部署,将web应用打成jar包即可运行。

调整SpringBoot应用容器的参数两种配置方法

  • 修改配置文件(简单)
  • 自定义配置类 (专业调优)

配文视频

嵌入式tomcat容器的运行参数配置

一、配置文件方式

在application.properties / application.yml可以配置Web 容器运行所需要的属性,可以通过该链接在官方网站查看关于server的所有配置项:server-properties

在这里插入图片描述

  • server.xx开头的是所有servlet容器通用的配置,
  • server.tomcat.xx开头的是tomcat 容器特有的配置参数参数
  • server.jetty.xx开头的是Jetty 容器特有的配置参数参数
  • server.undertow.xx开头的是undertow容器特有的配置参数参数

1.1.常用配置参数

参数 默认值 说明
server.port 8080 配置Web容器的端口号
server.servlet.session.timeout 30m(30分钟) session失效时间。如果不写单位则默认单位是秒。(注意:由于Tomcat中配置session过期时间是以分钟为单位,如果这里设置是秒的话,那么会自动转换为一个不超过所配置秒数的最大分钟数。比如配置了119秒(1分59秒),那么实际session过期时间是1分钟)
server.servlet.context-path / URL访问路径的基础路径
server.tomcat.uri-encoding UTF-8 配置Tomcat请求编码
server.tomcat.basedir 配置Tomcat运行日志和临时文件的目录。若不配置,则默认使用系统的临时目录。

1.2. tomcat性能优化核心参数

tomcat连接器工作原理图:
在这里插入图片描述

  • 在Acceptor之前维护一个请求接收队列,该队列的最大长度即:tomcat可以接受的最大请求连接数:server.tomcat.max-connections。
  • Acceptor监听连接请求,并生成一个 SocketProcessor 任务提交到线程池去处理
  • 当线程池里面的所有线程都被占用,新建的SocketProcessor 任务被放入等待队列,等待队列的最大程度:server.tomcat.accept-count
  • 线程池的server.tomcat.threads.max决定了tomcat的极限SocketProcessor 任务处理能力。不是越大越好,线程越多耗费的资源也越多。
  • 线程池的server.tomcat.threads.min-spare在应用空闲时,保留一定的线程数在线程池内。避免请求到来后,临时创建线程浪费时间。
参数 默认值 说明
server.tomcat.max-connections 8192 接受的最大请求连接数
server.tomcat.accept-count 100 当所有的线程都被占用,被放入请求队列等待的最大的请求连接数量
server.tomcat.threads.max 200 最大的工作线程池数量
server.tomcat.threads.min-spare 10 最小的工作线程池数量

二、自定义配置类方式

步骤:
1.建立一个配置类,加上@Configuration注解
2.添加定制器ConfigurableServletWebServerFactory
3.将定制器返回

@Configuration
public class TomcatCustomizer {
    
    

    @Bean
    public ConfigurableServletWebServerFactory configurableServletWebServerFactory(){
    
    
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(new MyTomcatConnectionCustomizer());
        return factory;
    }


    static class MyTomcatConnectionCustomizer implements TomcatConnectorCustomizer {
    
    

        public MyTomcatConnectionCustomizer() {
    
    
        }

        @Override
        public void customize(Connector connector) {
    
    
            connector.setPort(Integer.parseInt("8888"));
            connector.setProperty("maxConnections", "8192");
            connector.setProperty("acceptorThreadCount", "100");
            connector.setProperty("minSpareThreads", "10");
            connector.setProperty("maxThreads", "200");
        }
    }
}

这种方法可定制的内容更多,也更灵活。但需要你深入的理解server 容器的底层实现原理及设计机制,也需要你具备一定的TomcatServletWebServerFactory的API熟练度。

更灵活。但需要你深入的理解server 容器的底层实现原理及设计机制,也需要你具备一定的TomcatServletWebServerFactory的API熟练度。

猜你喜欢

转载自blog.csdn.net/hanxiaotongtong/article/details/122892922
今日推荐