替代 SocketUtils.findAvailableTcpPort()?

mem*_*und 6 java sockets spring spring-integration

以下初始化为spring-integration专用端口上的套接字。

目标是给应用程序 2 分钟的时间在该端口上运行,否则失败就是不成功。但是应用程序启动不应直接失败,该端口在启动时未空闲!

@Configuration
@EnableIntegration
public class SocketConfiguration {    
        @Value("${app.port}")
        private String port;
    
        @Bean
        public TcpConnectionFactoryFactoryBean tcpFactory() {
            CompletableFuture.runAsync(() -> SocketUtils.findAvailableTcpPort(port, port)).get(2, TimeUnit.MINUTES);
        }
}
Run Code Online (Sandbox Code Playgroud)

问题:从 Spring Framework 6SocketUtils开始。@Deprecated什么是它的正确替代品?

该文档仅声明作为替代方案:

建议您依靠服务器在随机端口上启动的能力,而不是使用 SocketUtils 查找服务器的可用本地端口

好吧,这不是我想要的,我也不能使用 if,因为我历史上绑定到该特定端口!

Art*_*lan 9

有一个org.springframework.test.util.TestSocketUtils代替。但正如加里所说,最好依靠操作系统0对端口选项的选择。尽管为什么要在生产代码中选择随机端口......

要获得真正选定的端口,您可以监听将为TcpConnectionServerListeningEvent您带来实际值的端口。