27

2 つの異なるポートを使用して Spring Boot でアプリケーションを構成しようとしていますが、まだ取得していません。私の最初の近似は 2 つのコントローラーで行われ、container.setPort(8080); を使用して 2 つのコントローラー内に @Bean を定義しました。そして、私の2番目の近似は、アクチュエータの依存関係を追加し、管理のポートを変更しましたが、アプリケーションが実行されません。「アドレスは既に使用されています: バインド」、2 つのポートを使用してアプリケーションを構成するにはどうすればよいですか? 管理者用に 1 つのポートが必要で、もう 1 つのポートは API のコンサルト用です。

4

5 に答える 5

32

前に述べserver.portたように、組み込みコンテナーがさまざまなポート (エンドポイントにアクセスするための管理関連のプロパティ) でリッスンするようにプロパティを設定することもできmanagement.portます。management.context-pathActuator

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);
    }
}

私は最近、http://tech.asimio.net/2016/12/15/Configuring-Tomcat-to-Listen-on-Multiple-ports-using-Spring-Boot.htmlでこのトピックについてブログを書きました。

于 2016-12-19T08:17:37.027 に答える
2

アクチュエータ管理ポートを変更するには、プロパティを使用できます

management.port=8081

全物件一覧はこちら

更新: この場合、アクチュエータは組み込み Tomcat (サーブレット コンテナ) インスタンスをもう 1 つ作成します。こちらとこちらをご覧ください

于 2016-04-01T13:28:07.007 に答える