springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port

文章目录

  • 1. 如何获取当前服务使用的IP
  • 2. 获取启动使用的端口号
    • 1. @Value、@ConfigurationProperties等方法 从配置文件中获取
    • 2. 提问:如果上面配置文件中不配server.port值会发生什么?
    • 3. 使用spring带的ServerProperties类
    • 4. 使用ServletWebServerApplicationContext类(可推荐)

1. 如何获取当前服务使用的IP

  1. 使用InetAddress类即可,直接看例子:

    public class test {
        public static void main(String[] args) throws Exception{
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println("localhost: " + localHost);
            System.out.println("getHostAddress:  " + localHost.getHostAddress());
            System.out.println("getHostName:  " + localHost.getHostName());
        }
    }
    
    

    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第1张图片

2. 获取启动使用的端口号

1. @Value、@ConfigurationProperties等方法 从配置文件中获取

  1. 在配置文件中配置server.port的值,之后通过@Value、@ConfigurationProperties 等方法从配置文件中获取

    server:
      port: 8085
    
  2. 测试代码:

    // 配置类 注入port的值
    @Configuration
    @ConfigurationProperties(prefix = "server")
    public class PortConfig {
        @Getter
        @Setter
        private int port;
    }
    
    @RestController
    public class TestController {
    
    	// 或者使用@Value方式注入
        @Value("${server.port}")
        private int port;
    
    	// 依赖配置
        @Autowired
        private PortConfig portConfig;
    
        @GetMapping("/test")
        public void test(){
            System.out.println(port);
            System.out.println(portConfig.getPort());
        }
    }
    

    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第2张图片

2. 提问:如果上面配置文件中不配server.port值会发生什么?

  1. @Value会导致启动报错,无法启动项目:
    在这里插入图片描述

  2. 把@Value注释,启动正常,但是**@ConfigurationProperties获取到的值是0**
    在这里插入图片描述我们知道springboot默认的port是8080,如果你真的很想获取到port,代码只能按照下面方式写:

    if(portConfig.getPort()==0){
    	port = 8080;
    } else {
    	port = portConfig.getPort();
    }
    
    或者
    int port = portConfig.getPort()>=0?portConfig.getPort():8080;
    

    这样子确实也可以获取到服务启动实际使用的port.

3. 使用spring带的ServerProperties类

  1. 经过上面第二点说明,固然大家会选择使用配置类的方式,毕竟@Value会导致项目启动不起来,而springboot有又自带专门存储server开头的配置的类ServerProperties,都不用自己创建一个配置类了。
    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第3张图片

  2. 如下测试代码:

    @RestController
    public class TestController {
    
        @Autowired
        private ServerProperties serverProperties;
        
        @GetMapping("/test")
        public void test(){
            System.out.println(serverProperties.getPort());
        }
    }
    

    在这里插入图片描述

  3. 同理,若当配置文件中不写 server.port配置,则默认值是null
    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第4张图片

4. 使用ServletWebServerApplicationContext类(可推荐)

  1. ServletWebServerApplicationContext类是web的上下文,里面有很多信息可以使用。

  2. 若没有在yaml有配置server.port,不会获取到null 而是默认值8080(内部已帮我们处理了)
    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第5张图片
    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第6张图片

  3. 代码:
    不在yaml配置 server.pot

    @RestController
    public class ConfigController {
        
        @Autowired
        private ServletWebServerApplicationContext servletWebServerApplicationContext;
    
        @GetMapping("/testPort")
        public void testPort(){
            System.out.println(servletWebServerApplicationContext.getWebServer().getPort());
        }
    }
    

    springboot项目要如何获取当前服务器的IP以及当前项目使用的端口号Port_第7张图片

你可能感兴趣的:(小知识,java,port,ip,springboot)