Springboot项目升级2.2.x升至2.7.x
创始人
2024-12-18 04:04:56
0

依赖管理

spring-boot-starter-parent 升级为2.7.1

     org.springframework.boot     spring-boot-starter-parent      2.7.1       

兼容老的配置文件格式,spring提供了专门的依赖进行兼容,但是建议还是在升级能成功运行之后进行配置的同步修改

      org.springframework.boot     spring-boot-properties-migrator     runtime 

如果使用了bootstrap.yml文件,升级之后默认是不会使用bootstrap.yml了,所以可能会导致启动之后配置没有生效,需要引入依赖

     org.springframework.cloud     spring-cloud-starter-bootstrap     3.0.4 

配置修改

2.7.x不会处理循环依赖问题,需要手动配置修改application.yml添加配置spring.main.allow-circular-references

如果有nacos的使用,版本替换为:

      com.alibaba.cloud     spring-cloud-starter-alibaba-nacos-config     2021.0.4.0        com.alibaba.cloud     spring-cloud-starter-alibaba-nacos-discovery     2021.0.4.0 

同时需要支持yml配置,添加 spring.config.import

spring:   profiles:     active: "@profileActive@"   application:     name: saas   cloud:     nacos:       server-addr: xx.xx.xx.xx:8848       discovery:         server-addr: xx.xx.xx.xx:8848         namespace: f8f5c0c4-adc9-4c37-be6b-ddc       config:         server-addr: xx.xx.xx.xx:8848  #配置中心         file-extension: yaml   #配置文件后缀名   dataId = application.name  +  file-extension         namespace: f8f5c0c4-adc9-4c37-be6b-ddc   config:     import:       - optional:nacos:${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} #配置中心

报错问题定位思路

启动报错:

Web application could not be started as there was no org.springframework.boot.web.servlet.server.ServletWebServerFactory bean defined in the context.

最开始搜索报错,很多网上说的一般都是忘记加注解@SpringBootApplication,或者没有引入依赖:

     org.springframework.boot     spring-boot-starter-web 

但是检查并没有遗漏。开始根据问题本身进行定位。

报错本身就是没有找到ServletWebServerFactory,那么思路就是检查xxxxxxxConfiguration中的代码是否正常执行,这里就是org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration

因为是Tomcat方式启动所以只需要关心tomcatServletWebServerFactory方法

这里我设置了debug的方式但是并没有走到这里

再次全局搜索怀疑可能是自动装配的类org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration有问题

再次尝试debug发现依然没有走到,继续思考查看类上方相关的Conditional注解条件是否满足,猜测可能是@ConditionalOnWebApplication(type = Type.SERVLET)不满足

点进注解查看

继续查看对应的org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition,搜索刚才的相关的SERVLET,继续debug发现type为null直接返回了

继续查找调用的地方进行debug发现autoConfigurationMetadata传入的就有问题,很多value都是空字符串

继续定位到上级调用,发现传入的数据依然和上面一样存在问题

继续跟踪定位,终于调到了我们自己写的代码了

继续查看上级调用,发现这个类是我们自己拷贝出来的Springboot内部的类,做了一些自定义的改造

这里就说明,可能是从低版本的Springboot中拷贝出来的,但是升级到2.7.x之后可能存在对应的逻辑变化,所以需要对比一下,大概是哪些代码不一致

Ctrl+A全选Ctrl+C复制我们自己写的代码,然后跳进内部的AutoConfigurationImportSelector再进行比较

这里发现我们自己的代码少了一行

ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add);

根据断言可以知道对应的这段代码不仅是读取了META-INF/spring.factories中的自动装配信息,还读取了META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中的自动装配的bean

最后查看了包结构,确实如此,升级后META-INF/spring.factories没有了ServletWebServerFactoryAutoConfiguration而是放到了META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中。最后解决就是复制对应的代码到自定义的类中,支持imports中的自动装配

相关内容

热门资讯

分享!微信里炸金花房卡卖家联系... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:33699510许多玩家在游戏中会购买房卡来享...
科普!金花微信群购买房卡,微信... 微信游戏中心:牌九房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信牌九房卡”...
推荐一款!游戏微信牛牛房卡神龙... 神龙大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
头条推荐!斗牛房卡充值龙珠大厅... 头条推荐!斗牛房卡充值龙珠大厅/房卡购买房间怎么开龙珠大厅是一款非常受欢迎的游戏,咨询房/卡添加微信...
微信房卡斗牛金花有透视吗/微信... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来...
终于发现!微信拼三张房卡哪里有... 微信游戏中心:拼三张房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信拼三张房...
推荐一款!金花微信链接市场价格... 微信游戏中心:新详心/天王大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或...
科普!金花房卡一般卖多少钱一张... 微信游戏中心:牛牛房卡,添加微信【8488009】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”,...
IA解析/金花充值房卡卡丁互娱... 卡丁互娱是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
我来教你/牛牛房卡制作链接先锋... 您好!微信先锋大厅/新道游大厅链接获取房卡可以通过以下几种方式购买: 1.微信渠道:(先锋大厅/新...
科普!炸金花房卡一张多少钱,微... 微信游戏中心:炸金花房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信炸金花房...
正规平台有哪些,金花房间怎么创... 今 日消息,战皇大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
微信金花房卡到哪里买/微信斗牛... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
分享!微信买链接炸金花房卡/新... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:33699510许多玩家在游戏中会购买房卡来享...
终于发现!炸金花房卡如何充值,... 微信游戏中心:炸金花房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信炸金花房...
科普!微信上玩金花房间怎么开,... 微信游戏中心:斗牛房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信斗牛房卡”...
正版授权!牛牛房卡批发平台海航... 正版授权!牛牛房卡批发平台海航大厅/在哪里买房卡自己怎么弄海航大厅是一款非常受欢迎的游戏,咨询房/卡...
终于找到“微信牛牛链接金花房卡... 新乐乐金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房...
玩家攻略,金花房卡怎么购买九游... 玩家攻略,金花房卡怎么购买九游联盟/微信链接房卡从哪里购得Sa9Ix苹果iPhone 17手机即将进...
终于发现!微信群牛牛房卡怎么买... 微信游戏中心:牛牛房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”...