springboot實現(xiàn)獲取當(dāng)前服務(wù)器IP及當(dāng)前項目使用的端口號Port
如何獲取當(dāng)前服務(wù)使用的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值會發(fā)生什么?
@Value會導(dǎo)致啟動報錯,無法啟動項目:
把@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;
這樣子確實也可以獲取到服務(wù)啟動實際使用的port.
3. 使用spring帶的ServerProperties類
經(jīng)過上面第二點說明,固然大家會選擇使用配置類的方式,畢竟@Value會導(dǎo)致項目啟動不起來,而springboot有又自帶專門存儲server開頭的配置的類ServerProperties,都不用自己創(chuàng)建一個配置類了。
如下測試代碼:
@RestController public class TestController { @Autowired private ServerProperties serverProperties; @GetMapping("/test") public void test(){ System.out.println(serverProperties.getPort()); } }
同理,若當(dāng)配置文件中不寫 server.port配置,則默認值是null
4. 使用ServletWebServerApplicationContext類(可推薦)
ServletWebServerApplicationContext類是web的上下文,里面有很多信息可以使用。
若沒有在yaml有配置server.port,不會獲取到null 而是默認值8080(內(nèi)部已幫我們處理了)
代碼:
不在yaml配置 server.pot
@RestController public class ConfigController { @Autowired private ServletWebServerApplicationContext servletWebServerApplicationContext; @GetMapping("/testPort") public void testPort(){ System.out.println(servletWebServerApplicationContext.getWebServer().getPort()); } }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot?Filter中注入bean無效為null問題
這篇文章主要介紹了Springboot?Filter中注入bean無效為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05