web-dev-qa-db-fra.com

Comment configurer cette propriété avec Spring Boot et un Tomcat intégré?

Est-ce que je configure des propriétés comme connectionTimeout dans le fichier application.properties ou est-ce que c'est ailleurs qui le fait? Je n'arrive pas à comprendre cela avec Google.

Liste des propriétés Tomcat

J'ai trouvé cet exemple Spring-Boot , mais il n'inclut pas de propriété connectionTimeout et lorsque je définis server.Tomcat.connectionTimeout=60000 dans mon fichier application.properties, une erreur se produit.

4
smuggledPancakes

Spring Boot 1.4 et versions ultérieures

A partir de Spring Boot 1.4, vous pouvez utiliser la propriété server.connection-timeout. Voir Spring Boot's propriétés communes de l'application .

Spring Boot 1.3 et versions antérieures

Fournissez un haricot EmbeddedServletContainerFactory personnalisé:

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

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

    // configure some more properties

    return factory;
}

Si vous n'utilisez pas Java 8 ou ne voulez pas utiliser Lambda Expressions , ajoutez la variable TomcatConnectorCustomizer comme ceci:

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

La méthode setConnectionTimeout() attend le délai d'expiration en millisecondes (voir connectionTimeout dans Apache Tomcat 8 Référence de configuration ).

23
hzpz

Je préfère un ensemble de propriétés système avant le démarrage du serveur:

/**
 * 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);
    }
}
2
Juraj

C'est en fait / supposé être server.connection-timeout dans votre application.properties. Référence , je vous suggère de le mettre en favori.

0
rorschach

Spring Boot 2.x et versions ultérieures La méthode d'implémentation des propriétés Tomcat incorporées qui ne peuvent pas être modifiées avec les propriétés d'application (yaml) A été modifiée.

reportez-vous au code ci-dessous.

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

        });
    }
}
0
장재훈