SpringBoot随机端口

2022-06-24 08:28:30

实际开发过程中,每个项目的端口号都是设定好的,我们可以通过server.prot指定端口。

方案一

在SpringBoot中,可以通过${random}直接生成随机数字

server.prot=${random.int[2000,8000]}

通过随机数生成一个在2000到8000的一个随机端口,但是也会存在一些问题,如果这个端口已经在使用了,那么启动必然会报错

方案二

publicclassStartCommand{publicStartCommand(String[] args){
        Boolean isServerPort=false;
        String serverPort="";if(args!= null){for(String arg: args){if(StringUtils.hasText(arg)&&arg.startsWith("--server.prot")){
                    isServerPort=true;
                    serverPort=arg;break;}}}//没有指定端口,则随机生成一个可用端口if(!isServerPort){int prot= ServerProtUtils.getAvailablePort();
            System.out.println("server.prot"+String.valueOf(prot));
            System.setProperty("server.prot",String.valueOf(prot));}else{
            System.out.println("server.prot:"+serverPort.split("=")[1]);
            System.setProperty("server.prot",serverPort.split("=")[1]);}}}

通过对启动参数遍历判断,如果有指定端口后续就不生成了,如果没有指定就通过ServerProtUtils获取一个可以使用的端口,并设置到环境变量中,在application.properties中获取端口:

server.prot=${server.prot}

获取可用端口代码

publicclassServerProtUtils{privatestaticfinalint MAX=65535;privatestaticfinalint MIN=2000;publicstaticintgetAvailablePort(){
        Random random=newRandom();int port= random.nextInt(MAX)%(MAX- MIN+1)+ MIN;boolean using= NetUtils.isLocalPortUsing(port);if(using){returngetAvailablePort();}else{return port;}}}

最后通过NetUtils来检查端口是否可用,如果获取到可用的端口就直接返回,没有就继续获取

publicclassNetUtils{publicstaticbooleanisLocalPortUsing(int port){boolean flag=true;try{
            flag=isPortUsing("127.0.0.1", port);}catch(Exception e){}return flag;}publicstaticbooleanisPortUsing(String host,int port){boolean flag=false;try{
            InetAddress theAddress= InetAddress.getByName(host);
            Socket socket=newSocket(theAddress,port);
            flag=true;}catch(Exception e){}return flag;}}

最后在启动类中调用端口即可

@SpringBootApplicationpublicclassRibbonApplication{publicstaticvoidmain(String[] args){//启动参数设置,比如自动生成端口newStartCommand(args);
        SpringApplication.run(RibbonApplication.class, args);}}
  • 作者:lifeisfuckingmovie
  • 原文链接:https://blog.csdn.net/ubaby/article/details/107973169
    更新时间:2022-06-24 08:28:30