1. ホーム
  2. spring

[解決済み] Spring Boot - 実行中のポートを取得する方法

2022-05-14 09:28:40

質問

Spring Bootアプリケーション(embedded tomcat 7を使用)を使用しています。 server.port = 0 の中に application.properties で、ランダムなポートを持たせることができます。 サーバーが起動し、あるポートで実行された後、私は選択されたポートを取得できるようにする必要があります。

私は @Value("$server.port") はゼロだからです。 これは一見単純な情報ですが、なぜ私のJavaコードからアクセスできないのでしょうか? どうすればアクセスできるのでしょうか?

どのように解決するのですか?

正しい方向性を示してくれた @Dirk Lachowski に感謝します。 解決策は、私が望むほどエレガントではありませんが、動作するようになりました。 Spring のドキュメントを読むと、サーバーが起動したら EmbeddedServletContainerInitializedEvent をリッスンしてポートを取得することができます。 以下は、その様子です。

import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;




    @Component
    public class MyListener implements ApplicationListener<EmbeddedServletContainerInitializedEvent> {

      @Override
      public void onApplicationEvent(final EmbeddedServletContainerInitializedEvent event) {
          int thePort = event.getEmbeddedServletContainer().getPort();
      }
    }