首页 文章

Spring Boot 2.1.0管理服务器端口在不同的端口上

提问于
浏览
1

在我的spring boot 2.0应用程序中,我让主应用程序侦听端口1234,我希望管理服务器在1235上运行 .

所以在我的配置文件中,我设置:

management.server.port=1235

我的服务器无法启动,出现此错误:

[错误] 2018-11-14 05:20:14.958 [main] SpringApplication - 应用程序运行失败org.springframework.beans.FatalBeanException:ServletWebServerFactory实现com.my.MyApplication $ 2无法实例化 . 要允许使用单独的管理端口,应使用顶级类或静态内部类来代替org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextFactory.determineServletWebServerFactoryClass(ServletManagementContextFactory.java:77)〜[在org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextFactory.registerServletWebServerFactory(ServletManagementContextFactory.java:64)〜[spring]中的spring-boot-actuator-autoconfigure-2.1.0.RELEASE.jar:2.1.0.RELEASE -boot-actuator-autoconfigure-2.1.0.RELEASE.jar:2.1.0.RELEASE] at org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextFactory.createManagementContext(ServletManagementContextFactory.java:52)〜[spring- boot-actuator-autoconfigure-2.1.0.RELEASE.jar:2.1.0.RELEASE] at org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration $ DifferentManagementContextConfiguration.afterSingletonsInstantiated(ManagementContex tAutoConfiguration.java:143)〜[spring-boot-actuator-autoconfigure-2.1.0.RELEASE.jar:2.1.0.RELEASE] org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:863 )〜[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)〜[spring-context-5.1.2 . RELEASE.jar:5.1.2.RELEASE]在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)〜[spring-context-5.1.2.RELEASE.jar:5.1.2.RELEASE] at at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)〜[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE] org.springframework.boot.SpringApplication .refresh(SpringApplication.java:775)[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE] org.springframework.boot.SpringApplication.refreshContext(S pringApplication.java:397)[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE]在org.springframework.boot.SpringApplication.run(SpringApplication.java:316)[spring-boot-2.1.0 .rELEASE.jar:2.1.0.RELEASE] org.springframework.boot.SpringApplication.run(SpringApplication.java:1260)[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE] at org . springframework.boot.SpringApplication.run(SpringApplication.java:1248)[spring-boot-2.1.0.RELEASE.jar:2.1.0.RELEASE] at com.my.MyApplication.main(EmsApplication.java:51)[main /:?]

如果我删除这个:

@Bean
public TomcatServletWebServerFactory containerFactory() {
    return new TomcatServletWebServerFactory() {
        @Override
        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);
            }
        }
        t
    };

}

然后它工作 .

如何解决这个问题呢?

谢谢!

1 回答

  • 1

    你的 TomcatWebServerFactory 子类是一个匿名的内部类 . 它需要是一个静态内部类或顶级类,以便可以实例化它:

    @Bean
    public TomcatServletWebServerFactory containerFactory() {
        return new CustomTomcatServletWebServerFactory();
    }
    
    static final class CustomTomcatServletWebServerFactory
            extends TomcatServletWebServerFactory {
    
        @Override
        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);
            }
        }
    
    }
    

    或者,您可以使用自定义程序而不是子类 TomcatServletWebServerFactory

    @Bean
    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> tomcatCustomizer() {
        return (tomcat) -> tomcat.addConnectorCustomizers((connector) -> {
            int maxSize = 50000000;
            connector.setMaxPostSize(maxSize);
            connector.setMaxSavePostSize(maxSize);
            if (connector.getProtocolHandler() instanceof AbstractHttp11Protocol) {
    
                ((AbstractHttp11Protocol<?>) connector.getProtocolHandler())
                        .setMaxSwallowSize(maxSize);
            }
        });
    }
    

相关问题