Приложение не запускается при открытии дополнительного порта через автоконфигурацию в качестве модуля - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь создать библиотеку, которая позволяет выставлять приложение SpringBoot на второй порт (8090).

Чтобы это работало, у меня есть автоконфигурация, как определено ниже:

@Configuration
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
public class HttpConfig {
    public HttpConfig() {
    }

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addAdditionalTomcatConnectors(new Connector[]{this.createStanderConnecter()});
        return factory;
    }

    private Connector createStanderConnecter() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(8090);
        return connector;
    }
}

Если я определю эту конфигурацию в том же проекте, она будет работать нормально. Но если я импортирую эту конфигурацию как модуль, мое приложение не запустится со следующей ошибкой:

Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans : tomcatServletWebServerFactory,servletContainer

Чего мне не хватает?

1 Ответ

0 голосов
/ 11 июля 2019

Я понял.Если кто-то хочет выполнить то, что я пытаюсь сделать.Вместо конфигурации мне пришлось реализовать WebServerFactoryCustomizer следующим образом:

@Component
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
public class HttpConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
    @Autowired
    ApplicationContext context;

    public HttpConfig() {
    }

    public void customize(TomcatServletWebServerFactory factory) {
        factory.addAdditionalTomcatConnectors(new Connector[]{this.createStanderConnecter()});
    }

    private Connector createStanderConnecter() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(8090);
        return connector;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...