在初始化 Bean 之前测试端口是否正在使用中



我正在使用 Spring Boot,并且有一个初始化EmbeddedServletContainerCustomizer的 bean。我有一个属性文件,用户在其中提供了要绑定的端口和 IP 地址(因此需要EmbeddedServletContainerCustomizer,因为该端口不是 Spring 引导使用的默认值(。在初始化此 Bean 之前,如何测试地址和端口组合是否已在使用中?我无法在这个豆子内创建一个ServerSocket。我希望有一种优雅的方式来捕获此异常并记录它。在使用端口/IP 组合的情况下,Spring 将使用堆栈跟踪关闭。

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

您可以使用Spring SocketUtils 例如

SocketUtils.findAvailableTcpPort(startRange, endRange);

最新更新