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()); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot整合Mybatis与thymleft实现增删改查功能详解
MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动。本文将整合MybatisPlus实现增删改查功能,感兴趣的可以了解一下2022-12-12
最新评论