【优化】Springboot 修改 tomcat连接池

【优化】Springboot 修改 tomcat连接池

factory.setTomcatProtocolHandlerCustomizers(tomcatProtocolHandlerCustomizers);

可以更换为 虚拟线程连接池

复制代码
package org.config.init;

import org.apache.catalina.Context;
import org.apache.catalina.core.AprLifecycleListener;
import org.apache.tomcat.util.scan.StandardJarScanner;
import org.springframework.boot.web.embedded.tomcat.TomcatProtocolHandlerCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Collection;
import java.util.List;
import java.util.concurrent.Executors;

/**
 * @Description: TomcatFactoryConfig
 */
@Configuration
public class TomcatFactoryConfig {
    /**
     * tomcat-embed-jasper引用后提示jar找不到的问题
     */
    @Bean
    public TomcatServletWebServerFactory tomcatFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                ((StandardJarScanner) context.getJarScanner()).setScanManifest(false);
            }
        };
        factory.addConnectorCustomizers(connector -> {
//            connector.setProperty("relaxedPathChars", "[]{}");
//            connector.setProperty("relaxedQueryChars", "[]{}");

            connector.setProperty("relaxedPathChars", "\"#<>[\\]^`{|}/");
            connector.setProperty("relaxedQueryChars", "\"#<>[\\]^`{|}/");

        });


        //支持APR  AIO
        //factory.setProtocol("org.apache.coyote.http11.Http11AprProtocol");
        //factory.addContextLifecycleListeners(new AprLifecycleListener());
        //支持APR  AIO

        Collection<TomcatProtocolHandlerCustomizer<?>> tomcatProtocolHandlerCustomizers = factory.getTomcatProtocolHandlerCustomizers();
        tomcatProtocolHandlerCustomizers.add(protocolHandlerCustomizer());
        factory.setTomcatProtocolHandlerCustomizers(tomcatProtocolHandlerCustomizers);

        return factory;
    }

    public static TomcatProtocolHandlerCustomizer<?> protocolHandlerCustomizer(){
        return protocolHandler -> {
            protocolHandler.setExecutor(Executors.newVirtualThreadPerTaskExecutor());
        };
    }
    
}
相关推荐
bobz9656 分钟前
Maglev 哈希在 Cilium 中的实践与优势
后端
RoyLin7 分钟前
TypeScript设计模式:单例模式
前端·后端·node.js
RoyLin10 分钟前
TypeScript设计模式:工厂方法模式
前端·后端·node.js
知其然亦知其所以然10 分钟前
MySQL 社招必考题:如何优化查询过程中的数据访问?
后端·mysql·面试
用户40993225021211 分钟前
FastAPI秒杀库存总变负数?Redis分布式锁能帮你守住底线吗
后端·ai编程·trae
平平无奇的开发仔11 分钟前
# Springboot 中BeanDefinition是在什么阶段被创建成Bean的
后端
掘金酱12 分钟前
🎉 2025年8月金石计划开奖公示
前端·人工智能·后端
SimonKing13 分钟前
接口调用总失败?试试Spring官方重试框架Spring-Retry
java·后端·程序员
Cache技术分享13 分钟前
191. Java 异常 - 捕获与处理异常
前端·后端
努力的小郑14 分钟前
从一次分表实践谈起:我们真的需要复杂的分布式ID吗?
分布式·后端·面试