web-dev-qa-db-fra.com

TomcatEmbeddedServletContainerFactory est manquant dans Spring Boot 2

J'ai la version 1.5.x de l'application Spring Boot, qui utilise org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainerFactory, j'essaie de la migrer vers Spring Boot 2, mais l'application ne se compile pas, bien qu'elle ait une dépendance à org.springframework.boot:spring-boot-starter-Tomcat. Le compilateur génère l'erreur ci-dessous:

error: package org.springframework.boot.context.embedded.Tomcat
46
Anton Krosnev

La classe a été supprimée et remplacée par org.springframework.boot.web.embedded.Tomcat.TomcatServletWebServerFactory Pour plus d'informations, consultez: Spring-Boot-2.0-Migration-Guide , qui indique:

Afin de prendre en charge les cas d’utilisation réactifs, la structure du package de conteneurs incorporés a été considérablement modifiée. EmbeddedServletContainer a été renommé WebServer et le package org.springframework.boot.context.embedded a été déplacé vers org.springframework.boot.web.server. En conséquence, EmbeddedServletContainerCustomizer a été renommé WebServerFactoryCustomizer.

Par exemple, si vous personnalisiez le conteneur Tomcat intégré à l'aide de l'interface de rappel TomcatEmbeddedServletContainerFactory, vous devez maintenant utiliser TomcatServletWebServerFactory et, si vous utilisiez un bean EmbeddedServletContainerCustomizer.

J'ai eu le problème que je devais envoyer une plus grande demande, alors la taille par défaut autorisée:

@Bean
    public TomcatServletWebServerFactory containerFactory() {
        return new TomcatServletWebServerFactory() {
            protected void customizeConnector(Connector connector) {
                int maxSize = 50000000;
                super.customizeConnector(connector);
                connector.setMaxPostSize(maxSize);
                connector.setMaxSavePostSize(maxSize);
                if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {

                    ((AbstractHttp11Protocol <?>) connector.getProtocolHandler()).setMaxSwallowSize(maxSize);
                    logger.info("Set MaxSwallowSize "+ maxSize);
                }
            }
        };

    }
41
Anton Krosnev

Au démarrage du printemps 2.0.0.RELEASE vous pouvez remplacer par le code suivant ::

@Bean
public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory Tomcat = new TomcatServletWebServerFactory() {
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint securityConstraint = new SecurityConstraint();
            securityConstraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            securityConstraint.addCollection(collection);
            context.addConstraint(securityConstraint);
        }
    };
    Tomcat.addAdditionalTomcatConnectors(redirectConnector());
    return Tomcat;
}

private Connector redirectConnector() {
    Connector connector = new Connector("org.Apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(8080);
    connector.setSecure(false);
    connector.setRedirectPort(8443);
    return connector;
}
57
Rajim

Grand merci! Je viens de cet article: https://blog.swdev.ed.ac.uk/2015/06/24/adding-embedded-Tomcat-ajp-support-to-a-spring-boot-application/

utilisant une botte à ressort 2.1.3:

@Configuration
@Data
public class TomcatConfiguration {

@Value("${Tomcat.ajp.port}")
int ajpPort;

@Value("${Tomcat.ajp.remoteauthentication}")
String remoteAuthentication;

@Value("${Tomcat.ajp.enabled}")
boolean tomcatAjpEnabled;

@Bean
public TomcatServletWebServerFactory servletContainer() {

    TomcatServletWebServerFactory Tomcat = new TomcatServletWebServerFactory();
    if (tomcatAjpEnabled)
    {
        Connector ajpConnector = new Connector("AJP/1.3");
        ajpConnector.setPort(ajpPort);
        ajpConnector.setSecure(false);
        ajpConnector.setAllowTrace(false);
        ajpConnector.setScheme("https");
        Tomcat.addAdditionalTomcatConnectors(ajpConnector);
    }

    return Tomcat;
  }

}
3
womd