Konfiguriere ich Eigenschaften wie "connectionTimeout" in der Datei "application.properties" oder ist die Option anderswo verfügbar? Ich kann das bei Google nicht herausfinden.
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.
Ab Spring Boot 1.4 können Sie die Eigenschaft server.connection-timeout
verwenden. Siehe Spring Boot allgemeine Anwendungseigenschaften .
Geben Sie eine benutzerdefinierte EmbeddedServletContainerFactory
name__-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 TomcatConnectorCustomizer
wie 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 connectionTimeout
in Apache Tomcat 8 Configuration Reference ).
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);
}
}
Es ist eigentlich soll server.connection-timeout
in Ihrem application.properties
sein. Referenz , ich schlage vor, dass Sie ein Lesezeichen setzen.
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(
"####################################################################################");
});
}
}