当前位置: 代码迷 >> java >> 如何使用Spring Boot和嵌入式Tomcat配置此属性?
  详细解决方案

如何使用Spring Boot和嵌入式Tomcat配置此属性?

热度:80   发布时间:2023-07-27 09:30:11.0

我是在application.properties文件中配置诸如connectionTimeout之类的属性,还是在其他地方进行此操作? 我无法从Google找到答案。

我找到了这个 ,但是它不包含connectionTimeout属性,当我在application.properties文件中设置server.tomcat.connectionTimeout=60000 ,出现错误。

Spring Boot 1.4及更高版本

从Spring Boot 1.4开始,您可以使用属性server.connection-timeout 参见Spring Boot的 。

Spring Boot 1.3及更早版本

提供定制的EmbeddedServletContainerFactory bean:

@Bean
public EmbeddedServletContainerFactory servletContainerFactory() {
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();

    factory.addConnectorCustomizers(connector -> 
            ((AbstractProtocol) connector.getProtocolHandler()).setConnectionTimeout(10000));

    // configure some more properties

    return factory;
}

如果您不使用Java 8或不想使用 ,请添加TomcatConnectorCustomizer如下所示:

    factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
        @Override
        public void customize(Connector connector) {
            ((AbstractProtocol) connector.getProtocolHandler()).setConnectionTimeout(10000);
        }
    });

setConnectionTimeout()方法期望以毫秒为单位的超时(请参阅《 connectionTimeout )。

在服务器启动之前,我更喜欢一组系统属性:

/**
 * Start SpringBoot server
 */
@SpringBootApplication(scanBasePackages= {"com.your.conf.package"})
//@ComponentScan(basePackages = "com.your.conf.package")
public class Application {
    public static void main(String[] args) throws Exception {
        System.setProperty("server.port","8132"));
        System.setProperty("server.tomcat.max-threads","200");
        System.setProperty("server.connection-timeout","60000");
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
    }
}

在Spring Boot 2.x及更高版本之后,嵌入了tomcat的实现方法已更改。

请参阅下面的代码。

import org.apache.coyote.http11.AbstractHttp11Protocol;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Configuration
public class TomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Autowired
    private ContainerProperties containerProperties;

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers(connector -> {
            AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) connector.getProtocolHandler();

            protocol.setMaxKeepAliveRequests(10);


            log.info("####################################################################################");
            log.info("#");
            log.info("# TomcatCustomizer");
            log.info("#");
            log.info("# custom maxKeepAliveRequests {}", protocol.getMaxKeepAliveRequests());
            log.info("# origin keepalive timeout: {} ms", protocol.getKeepAliveTimeout());
            log.info("# keepalive timeout: {} ms", protocol.getKeepAliveTimeout());
            log.info("# connection timeout: {} ms", protocol.getConnectionTimeout());
            log.info("# max connections: {}", protocol.getMaxConnections());
            log.info("#");
            log.info(
                "####################################################################################");

        });
    }
}

实际上应该在application.propertiesserver.connection-timeout ,建议您将其添加为书签。