5

为什么Spring Boot项目加上<log4j2.version>就可以更新版本?

 2 years ago
source link: https://blog.didispace.com/spring-boot-properties-log4j2-version/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

为什么Spring Boot项目加上<log4j2.version>就可以更新版本?

最近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教程可以点击直达!,欢迎收藏与转发支持!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK