2017-06-30 4 views
0

私はSpring Bootを使用しており、EmbeddedServletContainerCustomizerを初期化するBeanを持っています。私は、ユーザーがポートとIPアドレスを提供するプロパティーファイルを持っています(したがって、ポートはSpringブートが使用するデフォルトではないため、EmbeddedServletContainerCustomizerが必要です)。このBeanを初期化する前に、アドレスとポートの組み合わせがすでに使用されているかどうかをテストするにはどうすればよいですか?このBeanの内部にServerSocketを作成することができません。私は、この例外をキャッチしてログに記録するための優雅なやり方を望みます。 port/ipの組み合わせが使用されている場合、Springはスタックトレースでシャットダウンします。Beanを初期化する前にポートが使用中かどうかを確認するテスト

@Bean 
public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() throws UnknownHostException { 
    EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer = null; 

    embeddedServletContainerCustomizer = new EmbeddedServletContainerCustomizer() { 
     @Override 
     public void customize(ConfigurableEmbeddedServletContainer container) { 
      container.setPort(port); 
      container.setAddress(inetAddress); 
     } 
    }; 

    return embeddedServletContainerCustomizer; 
} 
+0

は、なぜあなたはそのための設定が必要になりますたとえば、Spring SocketUtils を使用することができますか?単に 'server.port'を設定するか、' server.port = $ {your.property:8080} 'を追加して、 'server.port'をあなたの値に置き換えるか、あるいは' 8080'を設定しないでください)。したがって、カスタマイザは必要ありません。また、ポートを検出する代わりに、このケースのために 'FailureAnalyzer'を書くことを提案します(そして、私はすでにこのケースのために1つあると信じています)。 –

答えて

1

あなたは

SocketUtils.findAvailableTcpPort(startRange, endRange); 
+0

SocketUtilsはServerSocketを作成して、動作しているかどうかを確認しています: https://github.com/spring-projects/spring-framework/blob/bc14c5ba83e1f211628456bbccce7b2531aac58c/spring-core/src/main/java/org/springframework/util/ SocketUtils.java。何がOPをServerSocketsの作成から制限しても、この解決策を制限する可能性があります。 – Gus

+0

私は(ほとんどの場合、セキュリティの)制限はソケット接続を作成することだと考えていますが、ソケット接続を待ちません。 – fg78nc

関連する問題