给定范围内的随机服务器端口弹簧启动

时间:2018-08-03 04:03:03

标签: spring-boot

我想在给定范围(5001-5100)内的随机端口上启动Spring Cloud应用程序(Spring Boot 1.5.14,Spring Cloud Edgware.SR4)。我知道我们可以使用server.port=0在Spring Boot应用程序中指定随机端口,但是我面临着以下两个问题:

  1. 选择给定范围[5000-5100]中的动态可用端口
  2. 当我使用server.port=0时,Eureka注册表显示端口为0,Spring Cloud是否支持动态端口?

1 个答案:

答案 0 :(得分:1)

Spring提供了实用程序类来扫描可用的TCP端口,因此我使用以下方法来设置随机服务器端口。

[
  {
    "Id" : 2010,
    "TotalValue" : 100.91478,
    "IndexValue" : 100.75859,
    "Date" : "7\/9\/2018 12:00:00 AM",
    "Compare" : "ABC"
  },
  {
    "Id" : 2010,
    "TotalValue" : 99.914788865745123,
    "IndexValue" : 100.86935289185379,
    "Date" : "7\/10\/2018 12:00:00 AM",
    "Compare" : "ABC"
  }
]

现在可以在启动Spring上下文之前在Spring Boot Application的主类中调用此方法,如下所示:

public static void setRandomPort(int minPort, int maxPort) {
   try {
        String userDefinedPort = System.getProperty("server.port", System.getenv("SERVER_PORT"));
        if (StringUtils.isEmpty(userDefinedPort)) {
           int port = SocketUtils.findAvailableTcpPort(minPort, maxPort);
           System.setProperty("server.port", String.valueOf(port));
           log.info("Server port set to {}.", port);
         }
    } catch (IllegalStateException var4) {
           log.warn("No port available in range 5000-5100. Default embedded server configuration will be used.");
    }
}

现在,这种随机端口配置在Spring Cloud环境中可以正常工作。