web-dev-qa-db-de.com

Wie konfiguriere ich diese Eigenschaft mit Spring Boot und einem eingebetteten Tomcat?

Konfiguriere ich Eigenschaften wie "connectionTimeout" in der Datei "application.properties" oder ist die Option anderswo verfügbar? Ich kann das bei Google nicht herausfinden.

Tomcat Eigenschaften Liste

Ich habe dieses Spring-Boot-Beispiel gefunden, aber es enthält keine connectionTimeout-Eigenschaft. Wenn ich server.Tomcat.connectionTimeout=60000 in meiner application.properties-Datei setze, wird eine Fehlermeldung angezeigt.

4

Spring Boot 1.4 und höher

Ab Spring Boot 1.4 können Sie die Eigenschaft server.connection-timeout verwenden. Siehe Spring Boot allgemeine Anwendungseigenschaften .

Spring Boot 1.3 und früher

Geben Sie eine benutzerdefinierte EmbeddedServletContainerFactoryname__-Bean an:

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

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

    // configure some more properties

    return factory;
}

Wenn Sie Java 8 nicht verwenden oder Lambda Expressions nicht verwenden möchten, fügen Sie den TomcatConnectorCustomizerwie folgt hinzu:

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

Die setConnectionTimeout()-Methode erwartet das Timeout in Millisekunden (siehe connectionTimeoutin Apache Tomcat 8 Configuration Reference ).

23
hzpz

Ich bevorzuge den Server vor dem Start:

/**
 * 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

Es ist eigentlich soll server.connection-timeout in Ihrem application.properties sein. Referenz , ich schlage vor, dass Sie ein Lesezeichen setzen.

0
rorschach

Spring Boot 2.x und höher Die Implementierungsmethode der Einbettung von Tomcat-Eigenschaften, die nicht mit den Anwendungseigenschaften (yaml) Geändert werden kann, wurde geändert.

beziehen Sie sich auf den Code unten.

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
장재훈