SpringBoot 动态端口号启动,SpringBoot 自动寻找可用端口号启动,java 检测端口号占用

望舒的头像
望舒
标签:
springboot动态端口号寻找可用端口java

在实际开发和测试环境中,端口冲突 是一件令人头疼的问题。默认情况下,Spring Boot 应用会尝试使用配置的 server.port(如 8080),但如果该端口被占用,则启动失败。

本文介绍一种 自动查找可用端口并启动 Spring Boot 应用 的实用方式,可有效解决端口冲突问题,尤其适用于多实例测试场景。

关键实现思路

  1. 使用 ServerSocket 判断端口是否被占用;
  2. 从默认端口开始,依次向上查找第一个可用端口;
  3. 将找到的可用端口注入 Spring Boot 应用。

Java 实现代码

复制
package com.example.dynamicport;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

import java.io.IOException;
import java.net.ServerSocket;

@SpringBootApplication
public class ApplicationTest {

    // 从指定端口开始查找可用端口
    private static int findAvailablePort(int defaultPort) {
        int port = defaultPort;
        while (true) {
            try (ServerSocket socket = new ServerSocket(port)) {
                return port;
            } catch (IOException e) {
                port++;
                if (port > 65535) {
                    throw new IllegalStateException("没有可用端口!");
                }
            }
        }
    }

    public static void main(String[] args) {
        int port = findAvailablePort(8080);
        new SpringApplicationBuilder(ApplicationTest.class)
                .properties("server.port=" + port)
                .run(args);
        System.out.println("应用启动成功,使用端口:" + port);
    }

}

作者:https://blog.xn--rpv331d.com/望舒

链接:https://blog.xn--rpv331d.com/望舒/blog/63

转载注意保留文章出处...

‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌​‌‌‌​​​‌​​​‌‌‌‌​‌​​‌​‌​‌‌‌‌‌​‌​​​‌‌​​​‌​​​​‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​​‌​​‌‌‌‌‌‌‌‌​‌​‌‌​‌‌​​​‌‌​‌​‌​​​‌​​​‌‌​​​‌​​​​‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌‌​‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌​‌‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌​​‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌​‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​‌‌​‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌​​‌​‌‌‌​‌‌‌​​‌‌‌‌​‌‌‌‌‌​‌‌‌​‌‌‌‌​‌‌​‌‌‌​‌‌‌​​‌‌‌​​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌​‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌​‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌​​‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌​​‌‌‌‌​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌‌​​​​​‌‌‌​​‌​​‌‌‌​​​​‌‌‌‌​​‌​‌‌‌‌​‌‌​​‌​‌​​​‌​​​‌‌‌‌‌​‌​​‌‌‌​‌​‌‌​​‌​‌‌‌​​​‌​‌​​​​‌‌​‌‌​​‌​​​‌​‌‌‌‌‌​​​​​‌‌‌​‌​​​​​‌‌​​​‌​​​‌​​​​​‌‌‌‌‌‌‌‌‌​​​​​​‌‌‌‌​​‌​​​‌​​​‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌‌​‌‌​‌‌‌‌‌‌‌​‌‌‌‌‌‌‌‌‌‌‌​‌‌‌‌​‌‌‌​​‌​‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‌‌
0
0
0
41
No data