springboot實(shí)現(xiàn)獲取當(dāng)前服務(wù)器IP及當(dāng)前項(xiàng)目使用的端口號(hào)Port
如何獲取當(dāng)前服務(wù)使用的IP
使用InetAddress類(lèi)即可,直接看例子:
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()); } }
獲取啟動(dòng)使用的端口號(hào)
1. @Value、@ConfigurationProperties等方法 從配置文件中獲取
在配置文件中配置server.port的值,之后通過(guò)@Value、@ConfigurationProperties 等方法從配置文件中獲取
server: port: 8085
測(cè)試代碼:
// 配置類(lèi) 注入port的值 @Configuration @ConfigurationProperties(prefix = "server") public class PortConfig { @Getter @Setter private int port; } @RestController public class TestController { // 或者使用@Value方式注入 @Value("${server.port}") private int port; // 依賴(lài)配置 @Autowired private PortConfig portConfig; @GetMapping("/test") public void test(){ System.out.println(port); System.out.println(portConfig.getPort()); } }
2. 提問(wèn):如果上面配置文件中不配server.port值會(huì)發(fā)生什么?
@Value會(huì)導(dǎo)致啟動(dòng)報(bào)錯(cuò),無(wú)法啟動(dòng)項(xiàng)目:
把@Value注釋?zhuān)瑔?dòng)正常,但是**@ConfigurationProperties獲取到的值是0**
我們知道springboot默認(rèn)的port是8080,如果你真的很想獲取到port,代碼只能按照下面方式寫(xiě):
if(portConfig.getPort()==0){ port = 8080; } else { port = portConfig.getPort(); } 或者 int port = portConfig.getPort()>=0?portConfig.getPort():8080;
這樣子確實(shí)也可以獲取到服務(wù)啟動(dòng)實(shí)際使用的port.
3. 使用spring帶的ServerProperties類(lèi)
經(jīng)過(guò)上面第二點(diǎn)說(shuō)明,固然大家會(huì)選擇使用配置類(lèi)的方式,畢竟@Value會(huì)導(dǎo)致項(xiàng)目啟動(dòng)不起來(lái),而springboot有又自帶專(zhuān)門(mén)存儲(chǔ)server開(kāi)頭的配置的類(lèi)ServerProperties,都不用自己創(chuàng)建一個(gè)配置類(lèi)了。
如下測(cè)試代碼:
@RestController public class TestController { @Autowired private ServerProperties serverProperties; @GetMapping("/test") public void test(){ System.out.println(serverProperties.getPort()); } }
同理,若當(dāng)配置文件中不寫(xiě) server.port配置,則默認(rèn)值是null
4. 使用ServletWebServerApplicationContext類(lèi)(可推薦)
ServletWebServerApplicationContext類(lèi)是web的上下文,里面有很多信息可以使用。
若沒(méi)有在yaml有配置server.port,不會(huì)獲取到null 而是默認(rèn)值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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot實(shí)現(xiàn)接口防刷的五種方案
接口防刷是保障系統(tǒng)安全與穩(wěn)定性的重要措施,惡意的高頻請(qǐng)求不僅會(huì)消耗服務(wù)器資源,還可能導(dǎo)致數(shù)據(jù)異常,甚至系統(tǒng)癱瘓,本文將介紹在SpringBoot框架下實(shí)現(xiàn)接口防刷的5種技術(shù)方案,需要的朋友可以參考下2025-04-04Springboot?Filter中注入bean無(wú)效為null問(wèn)題
這篇文章主要介紹了Springboot?Filter中注入bean無(wú)效為null問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05SpringBoot項(xiàng)目如何將Bean注入到普通類(lèi)中
這篇文章主要介紹了SpringBoot項(xiàng)目如何將Bean注入到普通類(lèi)中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11