我正在尝试创建一个库,可以在第二个端口(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/