web-dev-qa-db-de.com

TomcatEmbeddedServletContainerFactory fehlt in Spring Boot 2

Ich habe die Spring Boot-Anwendung Version 1.5.x, die org.springframework.boot.context.embedded.Tomcat.TomcatEmbeddedServletContainerFactory Verwendet. Ich versuche, sie auf Spring Boot 2 zu migrieren, aber die App lässt sich nicht kompilieren, obwohl eine Abhängigkeit von org.springframework.boot:spring-boot-starter-Tomcat Besteht. . Der Compiler gibt den folgenden Fehler aus:

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

Die Klasse wurde entfernt und durch org.springframework.boot.web.embedded.Tomcat.TomcatServletWebServerFactory Ersetzt. Weitere Informationen finden Sie unter: Spring-Boot-2.0-Migration-Guide

Um reaktive Anwendungsfälle zu unterstützen, wurde die Paketstruktur für eingebettete Container umfassend überarbeitet. EmbeddedServletContainer wurde in WebServer umbenannt und das Paket org.springframework.boot.context.embedded wurde in org.springframework.boot.web.server verschoben. Entsprechend wurde EmbeddedServletContainerCustomizer in WebServerFactoryCustomizer umbenannt.

Wenn Sie beispielsweise den eingebetteten Tomcat-Container mithilfe der TomcatEmbeddedServletContainerFactory-Rückrufschnittstelle anpassen, sollten Sie jetzt TomcatServletWebServerFactory verwenden. Wenn Sie eine EmbeddedServletContainerCustomizer-Bean verwenden, sollten Sie jetzt eine WebServerFactoryCustomizer-Bean verwenden.

Ich hatte das Problem, dass ich eine größere Anfrage senden musste, dann erlaubte die Standardgröß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

In Spring Boot 2.0.0.RELEASE können Sie durch folgenden Code ersetzen:

@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

Super danke! Ich komme aus diesem Artikel: https://blog.swdev.ed.ac.uk/2015/06/24/adding-embedded-Tomcat-ajp-support-to-a-spring-boot-application/

mit Spring Boot 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