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