SpringBoot 2.x - 3.x 踩坑记录

news/2025/11/23 23:48:44/文章来源:https://www.cnblogs.com/ldupup/p/19261901

一、现状:

  • JDK17
  • SpringBoot 2.6.8
  • Gradle 7.6

二、目标:

  • JDK17
  • gradle 8.10.2
  • SpringBoot 3.5.6 无漏洞版本

三、问题:

1. import javax.*报错

原因:SpringBoot 2.x 使用 javax 规范,SpringBoot 3.x 使用 jakarta 规范。底层组件的包名全变了

方案:可以使用 idea 的迁移工具,替换依赖,再手动单点处理
image.png

2. 找不到 javax.servlet.http.HttpServletRequest 的类文件

List<FileItem> fileItems =(List<FileItem>) sevletFileUpload.parseRequest(request);
找不到javax.servlet.http.HttpServtetRequest的类文件

原因:common-fileupload-1.6.0 使用的是 javaxHttpServletRequest,而项目代码重构后,传入的是 jakartaHttpServletRequest

方案:升级 commons-fileuploadorg.apache.commons:commons-fileupload2-jakarta-servlet5:2.0.0-M2

3. commons-fileuploadcommons-fileupload:commons-fileupload:1.6.0 升级到 org.apache.commons:commons-fileupload2-jakarta-servlet5:2.0.0-M2 后,ServletFileUpload sevletFileUpload = new ServletFileUpload(factory); 报错找不到 ServletFileUpload

方案:替换为 JakartaServletFileUpload sevletFileUpload = new JakartaServletFileUpload(factory);

4. DiskFileItemFactory factory = new DiskFileItemFactory();报错

原因:1.x 升 2.x 后,DiskFileItemFactory 的构造方案改成私有的了

方案:修改实现为 DiskFileItemFactory factory = DiskFileItemFactory.builder().get();

5. 报错 Could not find org.hibernate:hibernate-core:.

方案:修改为 annotationProcessor "org.hibernate:hibernate-core:6.4.10.Final"

6. 注解 @TypeDef 不存在

原因:hibernate-core:6.x 移除了 @TypeDef 注解

方案:删除 @TypeDef 的使用,将 @Type(type = "json") 修改为 @Type(value = JsonStringType.class)

7. LocalVariableTableParameterNameDiscoverer 找不到

SpringBoot3.x 移除了该类

方案:修改为 StandardReflectionParameterNameDiscoverer

8. 错误: 找不到符号 xxx.model.mysql.QTaskDetailDO;

原因:QTaskDetailDO 中使用了 @Generated 注解,这个注解在 rt.jar 中。spring 升级后默认不带这个 jar 包了

方案:.gradle增加implementation "com.auth0:java-jwt:3.2.0"

9. 注解 @EnableSwagger2WebMvc 不存在

报错:import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; 中的 EnableSwagger2WebMvc 爆红

方案:手动引入 io.springfox:springfox-spring-web:2.9.2

10. ByteSource.Util.bytes 爆红

原因:shiro-core 从 1.10.升级到 2.0 后,ByteSource 被移除

方案:直接替换为内部实现,把 ByteSource.Util.bytes(salt)修改为 new SimpleByteSource(userDTO.getSalt())

11. 报错找不到 @SuperBuilder

原因:注解处理器执行顺序的原因,可能是 mapstructlombok 执行冲突

  • 把其他注解处理器都注释掉后,不会报该类错误了,猜测是注解处理器依赖冲突
  • 逐个取消注释后,发现 annotationProcessor "com.vladmihalcea:hibernate-types-60:2.21.1"annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jpa" 都会导致 lombok 不生效

方案:

删除 hibernate-types-60,修改 querydsl 的引入方式为 annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jakarta"

12. 报错找不到 QTaskDetailDO(Q 类)

项目中使用了 querydsl 5.0.0,且正常指定了 annotationProcessor。报错是生成的 Q 类的 @Generated 注解爆红,import jakarta.annotation.processing.Generated; 中的 processing 爆红。但是 IDE 只显示找不到 Q 类

原因:gradle 升级后,配置需要更新。会导致不生成 Q 类,src/main/generated/里面的还是之前创建的 Q 类,创建时间不变化

方案:

步骤:

  1. 修改 gradle 文件,Q 类的源目录。Gradle 版本 8.10.2
修改前:
compileJava {options.generatedSourceOutputDirectory = file("src/main/generated/")
}修改后:
sourceSets.main.java.srcDir "src/main/generated/"
compileJava {
//    options.generatedSourceOutputDirectory = file("src/main/generated/")
}
  1. 修改后会在 Q 类的 @Generated 报错了
  2. 见 3.13.5,需要使用 jakarta 规范的包

13. jakarta & javax 适配报错

13.1 shiro 版本升级

@Bean("shiroFilter")
public ShiroFilterFactoryBean factory(DefaultWebSecurityManager securityManager) {ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();//添加自己的过滤器Map<String, Filter> filterMap = new HashMap<>();filterMap.put("jwt", new JWTFilter());factoryBean.setFilters(filterMap);factoryBean.setSecurityManager// 类型不匹配提示:Required type: Map<String, javax.servlet.Filter>Provided: Map<String, jakarta.servlet.Filter>

原因:ShiroFilterFactoryBean 里面用的是 javaxFilter 升级到了 jakarta,导致不兼容

参考[Feature] ShiroFilterFactoryBean with Jakarta Filter compatibility · Issue #1428 · apache/shiro

方案:

// 修改前
implementation "org.apache.shiro:shiro-spring-boot-starter:2.0.0"// 修改后
implementation platform("org.apache.shiro:shiro-bom:2.0.1")
implementation group: 'org.apache.shiro', name: 'shiro-core', classifier: 'jakarta'
implementation group: 'org.apache.shiro', name: 'shiro-web', classifier: 'jakarta'
implementation group: 'org.apache.shiro', name: 'shiro-spring', classifier: 'jakarta'

13.2. sentinel 版本升级

sentinel 不支持 jakarta 规范,鉴于工期紧张,采用删除组件的方案

13.3. commons-fileupload 版本升级

现在采用的是 commons-fileupload:1.5。传入的是 jakarta,但是方法需要传入 javax

方案:升级到 org.apache.commons:commons-fileupload2-jakarta:2.0.0-M1

13.4 querydsl 版本升级

报错:

@Bean
@Primary
public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {return new JPAQueryFactory(entityManager); ƍ
}// 编译错误提示:
Cannot resolve constructor 'JPAQueryFactory(EntityManager)'
Cast argument to 'Supplier<EntityManager>'

原因:报错本质是 JPAQueryFactory 中使用的是 javax.persistence.EntityManager.EntityManager,没有使用 jakarta 规范

方案:

// 修改前
implementation "com.querydsl:querydsl-jpa:5.1.0"
annotationProcessor "com.querydsl:querydsl-apt:5.1.0"// 修改后
implementation "com.querydsl:querydsl-jpa:5.1.0:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:5.1.0:jakarta"

14. 错误: Attempt to recreate a file for type xxx.QSysRolePermissionDO

报错:

原因:由于处理 3.12 的时候,我为了规避问题直接把生成的 Q 类复制到同级目录下,导致生成的 Q 类和已有 Q 类重复,无法生成

方案:把之前拷贝出去的 Q 类删掉,由 jpa 来自动生成

15. java.time.zone.ZoneRulesException: Unknown time-zone ID: timeZone_IS_UNDEFINED

原因:logback.xml 加载早于 spring,导致取不到 application.yaml 中定义的时区变量值

方案:修改 logback.xml 文件名为 logback-spring.xml

16. Invalid bean definition with name 'xxx.EssGatewayClient' defined in null: Invalid value type for attribute 'factoryBeanObjectType': java.lang.String

方案:springCloudVersion 版本从 2022.0.4 升级到 2025.0.0

17. 报错 java.lang.ClassNotFoundException: org.hibernate.dialect.MySQL57InnoDBDialect

方案:修改 application.ymlspring.jpa.database-platform 的值从 org.hibernate.dialect.MySQL57InnoDBDialectorg.hibernate.dialect.MySQLDialect

18. 报错 java.lang.ClassNotFoundException: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

方案:修改 application.ymlspring.jpa.properties.hibernate.physical_naming_strategy 的值从 org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategyorg.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广州比较好的留学机构

广州比较好的留学机构一、广州留学机构怎么选?这五个问题你考虑过吗?作为一位拥有十年经验的国际教育规划师,我经常被广州的学生和家长问及如何挑选留学中介。在选择过程中,许多人会陷入纠结:广州留学机构哪家更靠…

AtCoder Beginner Contest 433 题解

只写了 A-F。A - Happy Birthday! 4 开局就绷不住了,晚上脑子有点不清醒直接暴力 check 到 \(10^7\) 没想到直接过了。代码。但是正解还是要推式子的,设 \(k\) 年后为答案,则有 \(X + k = Z(Y + k)\),移项后得到 \…

使用 Lua 语言识别英文数字验证码

接下来我将使用 Lua 语言来实现类似的功能。Lua 是一种轻量级的嵌入式脚本语言,广泛应用于游戏开发、嵌入式系统等领域。 一、安装与配置安装 Lua 更多内容访问ttocr.com或联系1436423940 可以从 Lua 官网 下载并安装…

广州10大出国留学机构

广州10大出国留学机构作为从事国际教育规划工作十二年的资深顾问,张明,我经常需要为广州的学生和家长解答关于留学机构的选择问题。许多人在搜索时会输入各种疑问,比如广州的留学中介哪家更靠谱?申请美国研究生该选…

北京留学机构,谁知道哪家比较好

北京留学机构,谁知道哪家比较好一、北京留学机构怎么选?先看看大家常问的问题作为一名从事国际教育规划工作超过十二年的专业人士,我经常被学生和家长问到:北京留学机构这么多,到底哪家更好?每次面对这样的疑问,…

北京留学读研中介机构推荐

北京留学读研中介机构推荐一、北京留学读研中介怎么选?这些高频问题帮你避坑作为一位从事国际教育规划工作超过15年的资深顾问,我每天都会收到大量关于北京地区留学中介的咨询。许多学生在选择机构时常常感到迷茫,经…

北京留学机构排行榜

北京留学机构排行榜一、北京留学中介怎么选?听听资深规划师的建议作为专注国际教育领域十一年的前高校就业指导顾问,我每年都会接触到大量计划留学的北京家庭。在2025年11月20日这个时间点,当我们打开搜索引擎输入&…

北京口碑最好的十大留学机构

北京口碑最好的十大留学机构一、如何挑选北京留学中介?这些疑问你有吗?作为一位拥有12年经验的国际教育规划师,我经常遇到北京的学生和家长咨询留学机构的选择问题。大家最常搜索的关键词包括:北京留学中介哪家更靠…

北京口碑最好的留学机构

北京口碑最好的留学机构一、如何在北京挑选靠谱的留学中介?在北京这座教育资源高度集中的城市,每年都有大量学生和家长面临留学机构的选择难题。作为一名拥有超过十年经验的国际教育规划师,我经常被问到一系列具体问…

用 Kotlin 实现简单的文本处理程序

在这篇文章中,我们将使用 Kotlin 编写一个简单的文本处理程序。Kotlin 是一种现代化的、具有简洁语法的编程语言,广泛应用于安卓开发,也逐渐受到后端开发者的欢迎。我们将利用 Kotlin 强大的标准库,来实现一个功能…

北京口碑比较好的留学中介

北京口碑比较好的留学中介一、北京留学中介怎么选?这几类问题你考虑过吗作为有八年经验的国际教育规划师,我经常被北京的学生和家长问到类似的问题:北京到底哪家留学中介靠谱?想申美国前十名大学,哪家机构更专业?…

北京出国留学的机构哪家好

北京出国留学的机构哪家好一、北京出国留学的机构哪家好在北京寻找留学中介时,许多学生和家长往往会面临一系列具体而实际的问题。北京本地的留学机构究竟哪家更靠谱?如果要申请美国研究生,哪些中介的成功案例更丰富…

北京出国留学的机构哪个好

北京出国留学的机构哪个好作为一名拥有12年经验的国际教育规划师,我经常被北京的学生和家长问到一个核心问题:在众多留学中介中,究竟哪家更适合自己的需求?选择留学机构时,大家往往会有各种疑惑。比如,北京本地的…

北京比较靠谱的留学中介

北京比较靠谱的留学中介一、北京留学中介怎么选?五大疑问帮你理清思路作为从业十五年的殿堂级全案规划师,我经常遇到北京学生和家长咨询留学中介的选择问题。在2025年11月20日的最新行业调研中,我发现许多人在搜索引…

北京比较好的留学机构

北京比较好的留学机构一、北京留学机构选择:你的疑问全解析作为从事国际教育规划工作超过十年的资深顾问,我经常遇到北京的学生和家长提出类似问题:北京哪家留学中介更适合我孩子的背景?想要申请美国名校,北京哪个…

北京10大出国留学机构

北京10大出国留学机构一、北京留学中介怎么选?这五大问题你考虑过吗?作为从事国际教育规划工作超过12年的资深顾问,我经常被学生和家长问及类似的问题:北京这么多留学中介,究竟该如何选择?每家机构都宣称自己专业…

Upgrade Your Universal Audi-Style 3-Button Smart Key with KEYDIY MLB08 434MHz Non-OEM PCB

The Smart Key Replacement Solution You’ve Been Waiting For: KEYDIY MLB08-434MHz For European and American automotive repair shops and car owners, the cost and availability of OEM smart keys have long …

分库分表问题

View Post分库分表问题 分库分表步骤 一、容量估算评估分库、分表个数容量估算依据2点:现有数据、增长趋势,照着业务规划预估容量二、选key(均匀)数据量均匀 请求量均匀三、分表规则(分库分表分片键的设计)rang…

数据采集作业3 102302111 海米沙

第三次作业 作业1: 要求:指定一个网站,爬取这个网站中的所有的所有图片,例如:中国气象网(http://www.weather.com.cn)。实现单线程和多线程的方式爬取。 –务必控制总页数(学号尾数2位)、总下载的图片数量(尾…