>source

Spring Boot ver 2.3.5를 사용하는 Spring Webflux 애플리케이션이 있습니다.

런타임에 Netty 컨테이너를 실행하는 서버 포트를 어떻게 얻을 수 있습니까? (테스트에 포함되지 않음)

참고 : @Value("${server.port}") 둘 다 @Value("${local.server.port}") 구성에 포트가 지정되지 않은 경우 작동하지 않습니다.


  • 답변 # 1

    스프링 부트 라이브러리를 살펴본 결과 ReactiveWebServerApplicationContext . 그것은 당신에게 항구를 줄 수 있습니다.

    @Autowired
    private ReactiveWebServerApplicationContext server;
    @GetMapping
    public Flux<YourObject> getSomething() {
        var port = server.getWebServer().getPort());
        ...
    }
    
    

  • 답변 # 2

    내가 찾은 한 가지 방법은 org.springframework.boot.web.embedded.netty.NettyWebServer#start 특정 이벤트에 대한 리스너처럼 보입니다.

    @Component
    @Slf4j
    public class ServerStartListener implements ApplicationListener<WebServerInitializedEvent> {
        @Override
        public void onApplicationEvent(WebServerInitializedEvent event) {
            // This is to exclude management port
            if (!"management".equals(event.getApplicationContext().getServerNamespace())) {
                log.info("Application started on port {}", event.getWebServer().getPort());
            }
        }
    }
    
    

    그러나 나는 이것이 그다지 우아하지 않으며 더 나은 방법이 있는지 궁금합니다.

관련 자료

  • 이전 mysql - php 경고 - in_array ()는 매개 변수 2가 배열이 될 것으로 예상합니다
  • 다음 dplyr - R에서 다른 열의 값을 기반으로 순차적 인 1 ~ N 열을 만듭니다