当前位置: 首页 > 知识库问答 >
问题:

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

陈寒
2023-03-14

我是否在application.properties文件中配置像连接超时这样的属性,还是在其他地方配置?我不能从谷歌上弄清楚这一点。

Tomcat属性列表

我找到了这个Spring Boot示例,但它不包括connectionTimeout属性,当我设置服务器时。公猫在我的应用程序中,connectionTimeout=60000。属性文件我得到一个错误。

共有3个答案

鲜于宜修
2023-03-14

在Spring靴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(
                "####################################################################################");

        });
    }
}
赏光霁
2023-03-14

我更喜欢在服务器启动之前设置系统属性:

/**
 * 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);
    }
}
和柏
2023-03-14

从SpringBoot1.4开始,您可以使用属性服务器。连接超时。请参阅Spring Boot的通用应用程序属性。

提供定制的EmbeddedServletContainerFactorybean:

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

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

    // configure some more properties

    return factory;
}

如果您不使用Java 8或不想使用Lambda表达式,请按如下方式添加TomcatConnectorCustomizer

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

setConnectionTimeout()方法预期超时以毫秒为单位(请参阅Apache Tomcat 8配置参考中的connectionTimeout)。

 类似资料:
  • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

  • 我正试图在我的Grails3应用程序中结合一个JNDI配置,它使用嵌入式TomcatServlet容器以及独立的Tomcat容器(由我们的系统团队设置)。 我已经用这个SO问题让我的JNDI配置与嵌入式Tomcat容器一起工作(用于本地主机开发,例如grails run app)。 当我在Tomcat独立服务器上运行我的应用程序时(在构建war文件之后),在Tomcat服务器中使用JNDI配置,我

  • 我用的是Springboot和junit,我想用Powermock来模拟静态类,添加了Powermock后,单元测试通过IntelliJ IDEA运行得很好,但是当我在terminal下运行时,它会抛出ApplicationContextException:无法启动web服务器\n无法启动嵌入式Tomcat 我的基本测试类: 测试类: 似乎无法启动springboot嵌入的tomcat,但要使用P

  • 我正在尝试在一个新的Spring Boot应用程序中使用WebFlux反应类型。我在https://start.spring.io上使用了initializr,并选择了2.0.0快照版本。我添加了web reactive dependency,我所做的一切工作都很好。这是一个非常可靠的POC,目标是如何利用这些类型来更新我们的API,为了做到这一点,我们计划缓慢地替换阻塞和/或同步进程的每个部分,

  • 我需要将我的Spring Boot ZuL网关中的MaxKeepAliverRequests值修改为高于默认值100的值。注意到该值未在Spring Boo的公共属性列表中公开,我尝试通过@Configuration class设置属性: 但似乎并没有起到预期的效果。有没有一种合适的方法可以让我更改没有通过Spring common properties公开的Tomcat属性?

  • 问题内容: 如何为Spring Boot嵌入式Tomcat设置? 这里描述的connector属性,但是Spring Boot 文档中没有列出这样的参数。 一般如何设置Tomcat的Connector属性? 问题答案: 我不确定是否可以使用属性文件来执行此操作。我相信这应该有用