2 つの異なるポートを使用して Spring Boot でアプリケーションを構成しようとしていますが、まだ取得していません。私の最初の近似は 2 つのコントローラーで行われ、container.setPort(8080); を使用して 2 つのコントローラー内に @Bean を定義しました。そして、私の2番目の近似は、アクチュエータの依存関係を追加し、管理のポートを変更しましたが、アプリケーションが実行されません。「アドレスは既に使用されています: バインド」、2 つのポートを使用してアプリケーションを構成するにはどうすればよいですか? 管理者用に 1 つのポートが必要で、もう 1 つのポートは API のコンサルト用です。
42276 次
5 に答える
32
前に述べserver.port
たように、組み込みコンテナーがさまざまなポート (エンドポイントにアクセスするための管理関連のプロパティ) でリッスンするようにプロパティを設定することもできmanagement.port
ます。management.context-path
Actuator
server.port
と以外のポートでリッスンするにはmanagement.port
:
@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[] {});
}
}
アプリケーション.yml
server:
port: ${appPort:8800}
additionalPorts: 8881,8882
アプリケーション.java
@SpringBootApplication
@ComponentScan(...)
@Import(EmbeddedTomcatConfiguration.class)
public Application {
public static void main(String[] args) {
SpringApplication.run(Application .class, args);
}
}
于 2016-12-19T08:17:37.027 に答える