我尝试使用两个不同的端口在Spring Boot中配置应用程序,但我还没有停止。 我的第一个aproximation是两个控制器,我在两个控制器中用container.setPort(8080)定义了一个@Bean; 我的第二个aproximation已经添加了执行器依赖并改变了管理的端口,但我的应用程序没有运行。 "地址已在使用中:bind", 如何使用两个端口来配置应用程序?我想要一个端口用于管理员,另一个端口用于我的api的咨询。
答案 0 :(得分:19)
如前所述,server.port
和management.port
以及management.context-path
属性可以设置为使嵌入式容器侦听不同的端口(与管理相关的属性来访问{ {1}}端点)。
收听Actuator
和server.port
以外的其他端口:
management.port
application.yml
@Configuration
public class EmbeddedTomcatConfiguration {
@Value("${server.additionalPorts}")
private String additionalPorts;
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
Connector[] additionalConnectors = this.additionalConnector();
if (additionalConnectors != null && additionalConnectors.length > 0) {
tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return tomcat;
}
private Connector[] additionalConnector() {
if (StringUtils.isBlank(this.additionalPorts)) {
return null;
}
String[] ports = this.additionalPorts.split(",");
List<Connector> result = new ArrayList<>();
for (String port : ports) {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(Integer.valueOf(port));
result.add(connector);
}
return result.toArray(new Connector[] {});
}
}
Application.java
server:
port: ${appPort:8800}
additionalPorts: 8881,8882
上发表了关于此主题的博文
答案 1 :(得分:1)
要更改Actuator管理端口,您可以使用属性
{{1}}
查看完整的属性列表here
<强>更新强> 在这种情况下,Actuator会再创建一个嵌入式Tomcat(servlet容器)实例。 请参阅here和here
答案 2 :(得分:1)
由于springboot 2,ootero solution中提到的EmbeddedServletContainerFactory
不再可用,因此您应根据具体情况使用TomcatServletWebServerFactory
或TomcatReactiveWebServerFactory
。
除了工厂注入外,解决方案保持不变:
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
Connector[] additionalConnectors = this.additionalConnector();
if (additionalConnectors != null && additionalConnectors.length > 0) {
tomcat.addAdditionalTomcatConnectors(additionalConnectors);
}
return tomcat;
}
答案 3 :(得分:0)
这是旧文章,很可能问题已经解决,但是无论如何我还是想对更多读者说我的看法。我认为这是错误的思维方式,我看不到您何时真正需要带有两个端口的应用程序。
创建了Spring Boot以用于微服务体系结构。因此,在这种情况下,您应该将您的应用程序分为2个应用程序,每个应用程序都将具有自己的端口。出于不同的原因,这是件好事,最明显的是,您的api每天可以有1.000.000个请求,而管理员只有10个。
大多数情况下,您可能有很多共享代码,但是与第三个应用程序相比,应该打包为jar并将其导入到项目api和admin中。
答案 4 :(得分:0)
要在一个项目中运行2个或更多应用程序或更改默认端口,您可以执行以下操作
@SpringBootApplication
public class NewApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(NewApplication .class);
app.setDefaultProperties(Collections.singletonMap("server.port", "8083"));
app.run(args);
}
}