Порт управления Spring boot 2.1.0 на другой порт - PullRequest
0 голосов
/ 14 ноября 2018

В моем приложении весенней загрузки 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) ~ [spring-boot-activator-autoconfASEE. 2.1.j.Rj.Er. 2.1.R.Re.EARRARE 2.1..0.R. в org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextFactory.registerServletWebServerFactory (ServletManagementContextFactory.java:64) ~ [spring-boot-activator-autoconfigure-2.1.0.RE 2.1.1R.EE по адресу org.springframework.boot.actuate.autoconfigure.web.servlet.ServletManagementContextFactory.createManagementContext (ServletManagementContextFactory.java:52) ~ [spring-boot-activator-autoconfigure-2.1.0.RELEASE.RELEASE.j.re: в org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextAutoConfiguration $ DifferentManagementContextConfiguration.afterSingletonsInstantiated (ManagementContextAutoConfiguration.java:143) ~ [spring-boot-activator-autoRELE 2.1.RAREE 2.1RARE 2.1AERARE 2.1E ] в 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 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 (SpringApplication.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] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1248) [spring-boot-2.1.0.RELEASE.jar: 2.1.0.RELEASE] в 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 Ответ

0 голосов
/ 14 ноября 2018

Ваш 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);
        }
    });
}
...