為什麼加上<log4j2.version>配置就可以更新log4j2的版本?

程式猿DD發表於2021-12-23

最近log4j2的核彈級漏洞席捲了大部分網際網路公司,升級版本成了這兩週的核心任務。對於要升級到什麼版本,最新版本2.16.0是最佳選擇。那麼如何快速升級,之前也給出了Spring Boot專案升級版本的最簡方法

大家只需要使用這樣的簡單配置,就可以把log4j2一系列包的版本都升級了。

如果這種方法不行,注意加了配置之後要reload下。另外,如果你不是Spring Boot專案,或者是通過其他方式引入的log4j2,那麼需要單獨處理,或者在你專案的根依賴裡,直接寫上log4j2的依賴並設定版本為2.16.0,強制覆蓋其他地方引入的版本。與優秀的人在一起,自己也會慢慢優秀起來!歡迎加入高質量技術交流群

上面的配置很簡單,但還是有讀者不清楚為什麼這樣就可以了:

所以,今天就具體給大家說一下這個配置的原理。

一步步瞭解為什麼

下面我會以讀程式碼尋找源頭的方式,帶你一步步瞭解這個配置。希望你通過本文除了知道這個問題是為什麼,還能學會這種自己探究問題的方法。

第一步:觀察下你的pom.xml,有沒有發現很多依賴包括非Spring Boot Starter的依賴都沒有寫version?

既然沒version也能跑,那一定有地方定義了!把焦點轉移到parent上,似乎就這裡有version!

第二步:進一步檢視spring-boot-starter-parent的內容

進入後可以看到類似下面的xml配置,其中主要包含的內容是與build相關的,而非依賴資訊。

第三步:繼續觀察spring-boot-starter-parent中的資訊中,可以看到,它還有一個parent,好小子藏那麼深!那麼就繼續深入檢視spring-boot-dependencies的內容:

進入後,我們就可以看到重點了,該Spring Boot版本下各個元件的版本引數就在這裡:

搜尋log4j2,可以發現,這個版本下預設使用的是2.14.1

繼續往下搜,在dependencyManagement節點下,可以看到各個依賴的版本定義就是引用了上面配置的各個properties

所以,當我們在自己的Spring Boot中配置對應的properties,就可以覆蓋parent中的properties,並實現版本的更新。

好了,今天的小知識你Get到了嗎?如果您學習過程中遇到困難?可以加入我們超高質量的Spring技術交流群,與優秀的人在一起,自己也會慢慢優秀起來!更多Spring Boot教程可以點選直達!,歡迎收藏與轉發支援!

歡迎關注我的公眾號:程式猿DD,分享其他地方看不到的知識與思考

相關文章