IntelliJ IDEA是如何在不輸出日志的情況下識別Spring Boot項目的端口號的?

IntelliJ IDEA是如何在不輸出日志的情況下識別Spring Boot項目的端口號的?

IntelliJ idea Ultimate版本啟動spring Boot項目時,即使server.port配置為0且日志輸出關(guān)閉,也能神奇地顯示項目端口號。這究竟是如何實現(xiàn)的呢?

許多人猜測是通過JMX實現(xiàn)的,禁用JMX后,IDEA確實無法識別端口。然而,直接用jconsole查看spring boot進(jìn)程屬性,卻找不到端口信息。

秘密在于intellij idea巧妙地利用了Java Agent技術(shù)。啟動項目時,IDEA會在進(jìn)程中注入代碼,創(chuàng)建一個服務(wù),用于與IDEA客戶端通信,并提供進(jìn)程信息。 這使得IDEA可以監(jiān)控和控制運(yùn)行中的Spring Boot應(yīng)用。

這種機(jī)制類似于使用Java的RMI協(xié)議進(jìn)行遠(yuǎn)程通信。通過這種注入和通信,IDEA能夠獲取各種運(yùn)行時信息,包括端口號。 因此,即使沒有日志輸出,IDEA也能準(zhǔn)確識別Spring Boot項目的端口。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享