首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Boot2中缺少TomcatEmbeddedServletContainerFactory

Spring Boot2中缺少TomcatEmbeddedServletContainerFactory
EN

Stack Overflow用户
提问于 2017-12-08 01:00:38
回答 3查看 54.9K关注 0票数 71

我有Spring Boot应用程序1.5.x版,它使用org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory,我正在尝试将其迁移到Spring Boot2,但该应用程序无法编译,尽管它依赖于org.springframework.boot:spring-boot-starter-tomcat。编译器会发出以下错误:

代码语言:javascript
复制
error: package org.springframework.boot.context.embedded.tomcat
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-08 01:00:38

该类已被删除,并由org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory替换以查看更多信息:Spring-Boot-2.0-Migration-Guide,其内容如下:

为了支持反应式用例,嵌入式容器包结构进行了相当广泛的重构。EmbeddedServletContainer已重命名为WebServer,org.springframework.boot.context.embedded包已重新定位到org.springframework.boot.web.server。相应地,EmbeddedServletContainerCustomizer已被重命名为WebServerFactoryCustomizer。

例如,如果您使用TomcatEmbeddedServletContainerFactory回调接口定制嵌入式Tomcat容器,那么现在应该使用TomcatServletWebServerFactory;如果您使用的是EmbeddedServletContainerCustomizer bean,那么现在应该使用WebServerFactoryCustomizer bean。

我有一个问题,我需要发送更大的请求,而不是默认的允许大小:

代码语言:javascript
复制
@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);
                }
            }
        };

    }
票数 55
EN

Stack Overflow用户

发布于 2018-03-04 19:36:42

在Spring boot 2.0.0.RELEASE中,您可以替换为以下代码:

代码语言:javascript
复制
@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;
}
票数 81
EN

Stack Overflow用户

发布于 2019-03-29 21:40:13

伟大的Thx!我来自这篇文章:https://blog.swdev.ed.ac.uk/2015/06/24/adding-embedded-tomcat-ajp-support-to-a-spring-boot-application/

使用spring boot 2.1.3:

代码语言:javascript
复制
@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;
  }

}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47700115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档