SpringBoot 랜 덤 포트 시작 실현

1.SpringBoot 랜 덤 포트
1.기초 소개
  • 랜 덤 포트 는 지정 한 범위 내 에서 사용 할 수 있 는 포트 를 자동 으로 찾 을 수 있 습 니 다.설정 파일 에 고정된 시작 포트 를 지정 할 필요 가 없습니다
  • 예 를 들 어 SpringBoot 에서 여러 개의 인 스 턴 스 를 실행 하려 면 설정 파일 을 따로 수정 해 야 합 니 다
  • 랜 덤 포트 의 원 리 는 대응 하 는 socket 포트 와 연결 하 는 것 이 고 연결 할 수 있 으 면 이미 사용 되 었 으 며 반대로 사용 되 지 않 았 다
  • 무 작위 로 가 져 온 포트 검 사 를 사용 한 후 System.setProperty("속성 이름",port)를 통 해 사용 할 수 있 습 니 다.메모 리 를 쓰 면 설정 파일 에서 가 져 올 수 있 습 니 다
  • 기 록 된 이름 이 server.port 라면 설정 파일 에 포트 를 지정 하지 않 아 도 됩 니 다.그렇지 않 으 면 server.port=${속성 이름}
  • 을 설정 해 야 합 니 다.
  • 본 실천 은 SpringBoot 일반 공정 을 바탕 으로 프로젝트 비 계 를 직접 만 들 면 된다
  • .
  • [tip]예 를 들 어 SpringCloud 프로젝트 에서 서비스 제공 자 는 무 작위 포트 로 여러 서 비 스 를 빠르게 시작 할 수 있 습 니 다.설정 파일 을 따로 수정 하지 않 고 시작 할 수 있 습 니 다.
  • 2.실현 절차
    포트 도구 클래스 를 만 들 고 socket 으로 지정 한 포트 를 연결 합 니 다.예 를 들 어 다음 조건 이 있 습 니 다.
    a.지정 한 포트 범 위 는 8000-65535 입 니 다.
    b.식별 포트 가 사용 되 었 는 지,사용 되 었 는 지 계속 무 작위 로 생 성 됩 니 다.
    c.모든 포트 를 사용 할 수 없 으 면 오류 가 발생 하여 실행 을 중단 합 니 다.
    
    import java.net.InetAddress;
    import java.net.Socket;
    import java.util.Random;
    
    public class ServerPortUtil {
        private static final int MAX_PORT = 65535;
        private static final int MIN_PORT = 8000;
    
        public static String getAvailablePort() {
            Random random = new Random();
    		//            
            int maxRetryCount = MAX_PORT - MIN_PORT;
            while (maxRetryCount > 0) {
            	//          ,      ,        
                int port = random.nextInt(MAX_PORT - MIN_PORT) + MIN_PORT;
                boolean isUsed = isLocalePortUsing(port);
                if (!isUsed) {
                    return String.valueOf(port);
                }
                --maxRetryCount;
            }
            System.out.println("        ,    ");
            System.exit(1);
            return null;
        }
    
        /**
         *           
         *
         * @author [email protected]
         * @since 2020/10/14
         */
        public static boolean isLocalePortUsing(int port) {
            try {
                //     Socket  ,             true,     false, 127.0.0.1    
                new Socket(InetAddress.getByName("127.0.0.1"), port);
                return true;
            } catch (Exception e) {
                //           ,     
            }
            return false;
        }
    }
    
    명령 클래스 를 만 들 고 랜 덤 포트 기능 으로 포트 정 보 를 가 져 온 다음 포트 정 보 를 실행 환경 에 기록 합 니 다.
    a.들 어 오 는 매개 변수 가 포트 를 포함 하면 지정 한 것 을 사용 합 니 다.그렇지 않 으 면 자동 으로 생 성 됩 니 다.
    
    import com.codecoord.randomport.util.ServerPortUtil;
    import org.springframework.util.StringUtils;
    
    public class StartCommand {
        /**
         *       ,     server.port           ,              , ${auto.port}
         */
        private static final String SERVER_PORT = "auto.port";
    
        public StartCommand(String[] args) {
            boolean isServerPort = false;
            String serverPort = "";
            if (args != null) {
                for (String arg : args) {
                    if (StringUtils.hasText(arg) && arg.startsWith("--server.port" )) {
                        isServerPort = true;
                        serverPort = arg;
                        break;
                    }
                }
            }
    
            String port;
            if (isServerPort) {
               port = serverPort.split("=")[1];
            } else {
                port = ServerPortUtil.getAvailablePort();
            }
            System.out.println("Current project port is " + port);
            System.setProperty(SERVER_PORT, port);
        }
    }
    
    시작 클래스 가 시작 되 기 전에 환경 에 포트 정 보 를 기록 합 니 다.
    
    import com.codecoord.randomport.config.StartCommand;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplicatio
    public class SpringbootRandomPortApplication {
        public static void main(String[] args) {
            //        
            new StartCommand(args);
            SpringApplication.run(SpringbootRandomPortApplication.class, args);
        }
    }
    
    설정 파일 에 포트 를 무 작위 로 생 성 된 포트 정보 로 지정 합 니 다.
    
    server:
      #       
      port: ${auto.port}
    
    프로젝트 테스트 가 정상적으로 시 작 된 항목 은 콘 솔 에서 시 작 된 포트 정 보 를 볼 수 있 습 니 다.
    在这里插入图片描述
    在这里插入图片描述
    2.SpringBoot 다 중 인 스 턴 스 실행
    SpringBoot 의 다 중 인 스 턴 스 는 IDEA 에서 다음 과 같이 설정 되 어 있 습 니 다.
    在这里插入图片描述
    在这里插入图片描述
    그리고 시작 에 run/debug 를 시작 하면 됩 니 다.
    SpringBoot 랜 덤 포트 가 시 작 된 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 SpringBoot 랜 덤 포트 가 시 작 된 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기