code

스프링 부트 2에 TomcatEmbeddedServletContainerFactory가 없습니다.

starcafe 2023. 4. 3. 21:39
반응형

스프링 부트 2에 TomcatEmbeddedServletContainerFactory가 없습니다.

Spring Boot 어플리케이션 버전 1.5.x 를 사용하고 있습니다.org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactorySpring Boot 2로 이행하려고 하는데 앱이 컴파일되지 않습니다.단, A는org.springframework.boot:spring-boot-starter-tomcat컴파일러는 다음 오류를 발생시킵니다.

error: package org.springframework.boot.context.embedded.tomcat

스프링 부트 2.0.0.릴리스는 다음 코드로 대체할 수 있습니다.

@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;
}

클래스가 삭제되고 다음으로 대체되었습니다.org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory자세한 내용은 Spring-Boot-2.0-Migration-Guide에서 확인하십시오.이 문서는 다음과 같습니다.

사후 대응적인 사용 사례를 지원하기 위해 임베디드 컨테이너 패키지 구조가 상당히 광범위하게 리팩터링되었습니다.Embedded Servlet Container의 이름이 WebServer로 변경되었으며 org.springframework.boot.context.embedded 패키지가 org.springframework.boot.web.server로 재배치되었습니다.이에 따라 Embedded Servlet Container Customizer는 WebServerFactory Customizer로 이름이 변경되었습니다.

예를 들어 Tomcat Embedded Servlet Container Factory 콜백인터페이스를 사용하여 임베디드 Tomcat 컨테이너를 커스터마이즈한 경우 Tomcat Servlet WebServerFactory를 사용해야 하며 Embedded Servlet Container Customizer bean을 사용하고 있는 경우 WebServerFactory Customizer를 사용해야 합니다.

더 큰 요청을 전송해야 하는 문제가 있었습니다. 기본 크기는 다음과 같습니다.

@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);
                }
            }
        };

    }

Great Thx! 저는 다음 기사에서 왔습니다.https://blog.swdev.ed.ac.uk/2015/06/24/adding-embedded-tomcat-ajp-support-to-a-spring-boot-application/

스프링 부트 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;
  }

}

언급URL : https://stackoverflow.com/questions/47700115/tomcatembeddedservletcontainerfactory-is-missing-in-spring-boot-2

반응형