• 应用切换web容器

    由于Hzero底层是spring cloud,切换web容器的方式与spring boot应用一致,仅需在应用中移除默认web容器(HZERO服务默认使用undertow)后,依赖想要的web容器,并加入对应web容器的相关配置即可。

    依赖调整

    以hzero-admin服务为例,切换为jetty容器,原pom文件中的依赖如下:

    <dependency>
        <groupId>org.hzero</groupId>
        <artifactId>hzero-admin-saas</artifactId>
    </dependency>
    

    通过exclude的方式排除默认的undertow容器,并引入jetty容器后依赖如下:

    <dependency>
        <groupId>org.hzero</groupId>
        <artifactId>hzero-admin-saas</artifactId>
        <exclude>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </exclude>
    </dependency>
    <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    

    spring boot中三个常见web容器的依赖坐标如下:

    <!-- undertow 容器依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
    
    <!-- jetty 容器依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    
    <!-- tomcat 容器依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    

    相关配置介绍

    undertow配置介绍

    server: 
      undertow:
        # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接
        # 默认值为8,建议设置每个CPU核心一个线程
        io-threads: ${SERVER_UNDERTOW_IO_THREADS:4}
        # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程
        # 默认等于 io-threads*8,它的值设置取决于系统的负载,可适当调大该值
        worker-threads: ${SERVER_UNDERTOW_WORKER_THREADS:128}
        # 每块buffer的空间大小,越小空间被利用越充分
        # 不要设置太大,以免影响其他应用,合适即可
        buffer-size: ${SERVER_UNDERTOW_BUFFER_SIZE:1024}
        # 是否分配的直接内存(NIO直接分配的堆外内存)
        # 默认false
        direct-buffers: true
        # HTTP POST请求最大的大小
        # 默认0,无限制,可设置10M
        max-http-post-size: 10485760
        allow-unescaped-characters-in-url: true
    

    jetty配置介绍

    server: 
      jetty:
        # HTTP post/put 内容字节限制值
        max-http-post-size: ${SERVER_JETTY_MAX_HTTP_POST_SIZE:200000}
        # 接受器线程数,-1表示由操作环境决定
        acceptors: ${SERVER_JETTY_ACCEPTORS:-1}
        # 选择器线程数,-1表示由操作环境决定
        selectors: ${SERVER_JETTY_SELECTORS:-1}
    

    tomcat配置介绍

    server: 
      tomcat:
        # 允许的代理ip的正则表达式
        #internal-proxies:
        # 协议头,通常为X-Forwarded-Proto
        protocol-header: X-Forwarded-Proto
        # 当协议头为xxx值时,认为需要使用ssl,通常为https
        protocol-header-https-value: https
        # 端口头,通常为X-Forwarded-Port
        port-header: X-Forwarded-Port
        # 远程ip头,通常为X-Forwarded-For
        remote-ip-header: X-Forwarded-For
        # tomcat基本目录,不指定时使用临时文件夹
        #basedir:
        # 后台处理器的延时时长,默认为10s
        background-processor-delay: 10s
        # 工作线程的最大数量,默认200
        max-threads: ${SERVER_TOMCAT_MAX_THREADS:200}
        # 工作线程的最小数量,默认10
        min-spare-threads: 10
        # HTTP post请求内容字节限制,默认2097152
        max-http-post-size: ${SERVER_TOMCAT_MAX_HTTP_POST_SIZE:2097152}
        # HTTP 请求头字节限制,默认0,表示使用web容器的默认限制值
        max-http-header-size: 0
        # 是否要对重定向到上下文根的请求路径上添加/,默认true
        redirect-context-root: true
        # 重定向是否使用相对路径
        #use-relative-redirects: false
        # URI的解码字符集
        uri-encoding: UTF-8
        # 最大连接数,当连接数达到限制,请求会被阻塞到队列,队列大小由accept-count属性决定
        max-connections: ${SERVER_TOMCAT_MAX_CONNECTIONS:10000}
        # 阻塞队列大小
        accept-count: ${SERVER_TOMCAT_ACCEPT_COUNT:100}
        # 使得TLD扫描忽略的正则表达式列表
        #additional-tld-skip-patterns:
        # 静态资源配置
        #resource:
          # 静态资源缓存的存活时间,超时清除
          #cache-ttl: