java - 通过自动配置作为模块打开附加端口时,应用程序无法启动

标签 java spring-boot configuration

我正在尝试创建一个库,可以在第二个端口(8090)上公开 SpringBoot 应用程序。

为此,我有一个自动配置,定义如下:

@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

我错过了什么?

最佳答案

我想。如果其他人想要完成我正在努力做的事情。我必须实现 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;
    }
}

关于java - 通过自动配置作为模块打开附加端口时,应用程序无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56980310/

相关文章:

java - 获取包含@Size注释的字段名称及其最大长度

java - Play框架-错误: package org. junit不存在

SQL 语句中的 Spring Boot Hibernate 语法错误

spring-boot - 找不到类型为 'com.netflix.discovery.AbstractDiscoveryClientOptionalArgs' 的 bean

wcf - 在我的 WCF app.config 中设置 SendTimeout

python - 当我启动 'matplotlib' 时,如何加载并运行特定的包?

java - 在 Weblogic (10) 中,如何从 Java 访问节点名称?

java - 如何在 Java 中设置日期的最小时间?

spring-boot - JSP文件未在浏览器中加载,但文件名在Spring Boot应用程序的浏览器中显示为字符串

java - 在 Android 中画一 strip 有弯曲边缘的线