springboot实现获取当前服务器IP及当前项目使用的端口号Port
如何获取当前服务使用的IP
使用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());
}
}

获取启动使用的端口号
1. @Value、@ConfigurationProperties等方法 从配置文件中获取
在配置文件中配置server.port的值,之后通过@Value、@ConfigurationProperties 等方法从配置文件中获取
server: port: 8085
测试代码:
// 配置类 注入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());
}
}

2. 提问:如果上面配置文件中不配server.port值会发生什么?
@Value会导致启动报错,无法启动项目:

把@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类
经过上面第二点说明,固然大家会选择使用配置类的方式,毕竟@Value会导致项目启动不起来,而springboot有又自带专门存储server开头的配置的类ServerProperties,都不用自己创建一个配置类了。

如下测试代码:
@RestController
public class TestController {
@Autowired
private ServerProperties serverProperties;
@GetMapping("/test")
public void test(){
System.out.println(serverProperties.getPort());
}
}

同理,若当配置文件中不写 server.port配置,则默认值是null

4. 使用ServletWebServerApplicationContext类(可推荐)
ServletWebServerApplicationContext类是web的上下文,里面有很多信息可以使用。
若没有在yaml有配置server.port,不会获取到null 而是默认值8080(内部已帮我们处理了)


代码:
不在yaml配置 server.pot
@RestController
public class ConfigController {
@Autowired
private ServletWebServerApplicationContext servletWebServerApplicationContext;
@GetMapping("/testPort")
public void testPort(){
System.out.println(servletWebServerApplicationContext.getWebServer().getPort());
}
}

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解读过滤器(Filter)与拦截器(Interceptor)的区别及说明
这篇文章主要介绍了过滤器(Filter)与拦截器(Interceptor)的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-10-10
springboot版本升级以及解决springsecurity漏洞的问题
这篇文章主要介绍了springboot版本升级以及解决springsecurity漏洞的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-08-08
java中String,数组,ArrayList三者之间的转换
这篇文章主要介绍了java中String,数组,ArrayList三者之间的转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
使用Maven将Java项目打包为Docker镜像的实战方法
本文介绍了两种使用Maven将Java项目打包为Docker镜像的实战方法: Google Jib插件方案:无需Dockerfile,直接通过Maven插件构建镜像,优势包括分层构建、安全高效、镜像体积小,特别适合SpringBoot项目,文章详细展示了使用Maven构建Java项目并生成Docker镜像的完整流程2026-02-02


最新评论