范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SpringBoot3。0升级,踩坑之旅,附解决方案

  本文基于  newbeemall  项目升级Spring Boot3.0踩坑总结而来,附带更新说明:
  Spring-Boot-3.0-发布说明
  Spring-Boot-3.0.0-M5-发布说明  一. 编译报错,import javax.servlet.*;不存在
  这个报错主要是Spring Boot3.0已经为所有依赖项从  Java EE  迁移到 Jakarta EE API ,导致 servlet  包名的修改,Spring团队这样做的原因,主要是避免 Oracle  的版权问题,解决办法很简单,两步走:
  1 添加  jakarta.servlet  依赖      jakarta.servlet     jakarta.servlet-api 1. 修改项目内所有代码的导入依赖修改前:
  import javax.servlet.*
  修改后:
  import jakarta.servlet.* 二. 附带的众多依赖包升级,导致的部分代码写法过期报警2.1 Thymeleaf升级到3.1.0.M2,日志打印的报警14:40:39.936 [http-nio-84-exec-15] WARN  o.t.s.p.StandardIncludeTagProcessor - [doProcess,67] - [THYMELEAF][http-nio-84-exec-15][admin/goods/goods] Deprecated attribute {th:include,data-th-include} found in template admin/goods/goods, line 4, col 15. Please use {th:insert,data-th-insert} instead, this deprecated attribute will be removed in future versions of Thymeleaf. 14:40:39.936 [http-nio-84-exec-15] WARN  o.t.s.p.AbstractStandardFragmentInsertionTagProcessor - [computeFragment,385] - [THYMELEAF][http-nio-84-exec-15][admin/goods/goods] Deprecated unwrapped fragment expression "admin/header :: header-fragment" found in template admin/goods/goods, line 4, col 15. Please use the complete syntax of fragment expressions instead ("~{admin/header :: header-fragment}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
  可以看出作者很贴心,日志里已经给出了升级后的写法,修改如下:  修改前:  修改后: 2.2 Thymeleaf升级到3.1.0.M2,后端使用thymeleafViewResolver手动渲染网页代码报错// 修改前 Spring Boot2.7: WebContext ctx = new (request, response,         request.getServletContext(), request.getLocale(), model.asMap()); html = thymeleafViewResolver.getTemplateEngine().process("mall/seckill-list", ctx);
  上述代码中针对  WebContext  对象的创建报错,这里直接给出新版写法 // 修改后 Spring Boot3.0: JakartaServletWebApplication jakartaServletWebApplication = JakartaServletWebApplication.buildApplication(request.getServletContext()); WebContext ctx = new WebContext(jakartaServletWebApplication.buildExchange(request, response), request.getLocale(), model.asMap()); html = thymeleafViewResolver.getTemplateEngine().process("mall/seckill-list", ctx);三. 大量第三方库关于Spring Boot的starter依赖失效,导致项目启动报错
  博主升级到3.0后,发现启动时, Druid  数据源开始报错,找不到数据源配置,便怀疑跟 Spring boot  3.0 更新有关
  这里直接给出原因: Spring Boot  3.0 中自动配置注册的 spring.factories  写法已废弃,改为了 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports  写法,导致大量第三方 starter  依赖失效
  在吐槽一下,这么重要的更改在Spring官方的   Spring-Boot-3.0-发布说明   中竟然没有,被放在了  Spring-Boot-3.0.0-M5-发布说明   中
  这里给出两个解决方案:  1. 等待第三方库适配  Spring Boot  3.02. 按照  Spring Boot  3.0要求,在项目resources  下新建 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports  文件,手动将第三方库的 spring.factories  加到 imports  中,这样可以手动修复第三方库 spring boot starter  依赖失效问题四. Mybatis Plus 依赖问题
  Mybatis plus  最新版本还是3.5.2,其依赖的 mybatis-spring  版本是2.2.2(mybatis-spring  已经发布了3.0.0版本适配 Spring Boot  3.0),这会导致项目中的sql查询直接报错,这里主要是因 Spring Boot  3.0中删除 NestedIOException  这个类,在 Spring boot  2.7中这个类还存在,给出类说明截图
  image.png
  这个类在2.7中已经被标记为废弃,建议替换为 IOException , 而 Mybatis plus 3.5.2中还在使用。这里给出问题截图 MybatisSqlSessionFactoryBean 这个类还在使用 NestedIOException
  image.png
  查看  Mybatis plus  官方issue也已经有人提到了这个问题,官方的说法是 mybatis-plus-spring-boot-starter  还在验证尚未推送maven官方仓库,这里我就不得不动用我的小聪明,给出解决方案: 1. 手动将原有的  MybatisSqlSessionFactoryBean  类代码复制到一个我们自己代码目录下新建的 MybatisSqlSessionFactoryBean  类,去掉 NestedIOException  依赖2. 数据源自动配置代码修改 @Slf4j @EnableConfigurationProperties(MybatisPlusProperties.class) @EnableTransactionManagement @EnableAspectJAutoProxy @Configuration @MapperScan(basePackages = "ltd.newbee.mall.core.dao", sqlSessionFactoryRef = "masterSqlSessionFactory") public class HikariCpConfig {      @Bean     public MybatisPlusInterceptor mybatisPlusInterceptor() {         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));         return interceptor;     }       @Bean(name = "masterDataSource")     @ConfigurationProperties(prefix = "spring.datasource.master")     public DataSource masterDataSource() {         return new HikariDataSource();     }      /**      * @param datasource 数据源      * @return SqlSessionFactory      * @Primary 默认SqlSessionFactory      */     @Bean(name = "masterSqlSessionFactory")     public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource datasource,                                                      Interceptor interceptor,                                                      MybatisPlusProperties properties) throws Exception {         MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();         bean.setDataSource(datasource);         // 兼容mybatis plus的自动配置写法         bean.setMapperLocations(properties.resolveMapperLocations());         if (properties.getConfigurationProperties() != null) {             bean.setConfigurationProperties(properties.getConfigurationProperties());         }         if (StringUtils.hasLength(properties.getTypeAliasesPackage())) {             bean.setTypeAliasesPackage(properties.getTypeAliasesPackage());         }         bean.setPlugins(interceptor);         GlobalConfig globalConfig = properties.getGlobalConfig();         bean.setGlobalConfig(globalConfig);         log.info("------------------------------------------masterDataSource 配置成功");         return bean.getObject();     }      @Bean("masterSessionTemplate")     public SqlSessionTemplate masterSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {         return new SqlSessionTemplate(sqlSessionFactory);     }  }
  到这里,项目就能够正常跑起来了  总结
  Spring Boot  3.0 升级带来了很多破坏性更改,把众多依赖升级到了最新,算是解决了一部分历史问题,也为了云原型需求,逐步适配 graalvm  ,不管怎么样作为技术开发者,希望有更多的开发者来尝试 Spring Boot  3.0 带来的新变化。

消费券来了!多地发放消费券提振消费活力商务部将2023年确定为消费提振年,3月是全国消费促进月。最近,很多地方都开始发放消费券,促进消费加快恢复和增长。北京市商务局面向每位在京消费者发放最多1600元的京彩绿色消费券,西瓜有哪些种植管理技巧?怎样才能种出高产优质的好西瓜?春耕进行时最近有几位农民朋友想了解关于西瓜种植管理方面的知识,那么今天这篇文章就给大家简单讲一讲西瓜从播种到采收前的种植管理重点注意事项和技术要点吧,种植西瓜的朋友可以一起看一看学如何注册宁波外贸公司流程收藏一注册外贸公司条件1有注册地址2经营范围需经过审批并通过,经营范围必须有从事货物及技术的进出口业务3公司的组织形式内资外贸公司或外资外贸公司4企业已办理税务登记,并且依法纳税5已开收藏!2023国考面试攻略来了近日,随着国考面试名单公布,面试环节即将到来。如何提前进行面试练习?怎样提升临场面试技巧?如何穿着才能显得落落大方?面试时有什么必备礼仪?过度焦虑如何进行心态调整?1。了解岗位考情博彦科技为微软小冰和百度度秘聊天机器人提供语料和机器训练服务据媒体报道博彦科技的基础数据处理团队及数据工程师团队一直持续在为微软小冰聊天机器人百度度秘聊天机器人提供语料与机器训练服务。且博彦科技与微软Meta(脸书母公司),谷歌,亚马逊,百碳化硅不香了?特斯拉高管在投资者日活动上宣布将碳化硅使用量减少75自从特斯拉宣布旗舰车型Model3将搭载意法半导体的碳化硅功率器件之后,碳化硅就一夜成名,成为了各大企业争相追逐的新趋势。目前,火灾是引起二氧化碳浓度升高的关键因素之一16日,记者从中科院空天信息创新研究院(以下简称空天院)获悉,空天院研究人员对全球火灾碳排放对大气二氧化碳浓度影响的量化研究表明,火灾是引起全球大气二氧化碳浓度升高的关键因素之一,美女街拍街拍从草根到流行街头自拍,是指在街上或公共场所里自拍的一种行为。随着智能手机的普及,街头自拍已成为年轻人生活中的一部分,更成为社交媒体上的一种风尚。但其实,街头自拍的起源是从十年前的欧美流行起来的杨勇拄着拐杖登门,许世友调侃你在我面前装什么老?一切礼仪,都是为了文饰那些虚应故事的行为,言不由衷的欢迎,出尔反尔的殷勤而设立的如果有真实的友谊,这些虚伪的形式就该一律摒弃。莎士比亚这个地球上的每个人,都是浩瀚宇宙中璀璨的星辰,娘家人到了!丫丫回家提上日程网站截图据中国动物园协会网站消息,为做好大熊猫丫丫的饲养护理和运返工作,按照国家有关主管部门要求,中国专家组成员北京动物园的兽医和饲养员已于美国当地时间3月16日抵达孟菲斯动物园。重拳出击!一周内,浙江7名领导干部被查处或开除,看看都有谁写在最前反腐倡廉,绝对不是一句口号,而是国家一直都在路上的行动。十八大以后,我国对于贪腐官员的惩处,一直都是高压态势,今年两会,国家再次强调,不会放松对贪腐打击力度。两会后,已经有
世界杯年的瞻前与顾后,五大联赛的惊喜与被动随着马塞洛在法兰西大球场高举这大耳朵杯与皇马的对于一同庆祝胜利,20212022赛季欧洲所有的重要比赛全部拉下帷幕,赛季的结束以为着一个故事的终结同时也是一段新故事的开始,在过去的巴萨重签梅西条件曝光,内马尔或主动离队,巴黎阿森纳争抢新神锋一无法拒绝!巴萨巨头计划约见梅西,两大签约条件曝光,巴黎要输了巴黎因为姆巴佩暴怒要求离队的事件处于焦头烂额的阶段,但更难处理的还是梅西的续约问题,巴黎并不像巴萨那样,拥有多次与梅西巴黎将迎巨变!齐达内或1月接手,两大条件曝光,姆巴佩迎转机在姆巴佩希望离开巴黎圣日耳曼的消息被媒体曝光之后,阿尔赫莱菲坎波斯加尔蒂的未来都变得悬而未决。法国媒体透露,如果满足两个条件,齐达内有意接过巴黎的教鞭。齐达内一直是巴黎最心仪的主帅被严重高估!广东2米26新星被杜锋弃用,朱芳雨曾称可以打NBA广东队输给了深圳队广东队1分输给了深圳队,虽然只输了1分,但其背后能反映出很多问题,要知道此前广东队对深圳队已经是18连胜,一定程度上体现了广东队的衰落。目前广东队打了三场比赛,1CBA排名更新!辽宁第二广东倒数,大黑马金身已破,北控连升三级CBA联赛目前正在进行常规赛第三轮比赛的争夺,本赛季联盟当中的格局已经彻底被打乱。前三轮比赛保持不败的球队目前也只剩下辽宁和浙江。根据CBA最新公布的排名情况,浙江辽宁吉林北控新疆曝广州队或裁掉林书豪!郭士强也救不了他,就此告别CBA广州队新赛季状态不好广州队又输球了,102108输给了老对手山西队,山西队上赛季季后赛就淘汰了广州队,在葛昭宝缺阵的情况下,广州队还是没有复仇成功。赛季至今三场常规赛,广州队598广东负深圳,周鹏离队原因真假难辨,原来张镇麟才是诱因CBA联赛第三轮,广东宏远输给了自己的老队长周鹏带队的深圳马可波罗,赛季三轮比赛,成绩变成了一胜两负,这个开局有点亏。本场比赛结束以后,很多广东宏远球迷都表示不理解为什么广东宏远会CBA开赛至今!只有这六名外援,称得上是超级外援CBA新赛季各支球队都有两名外援(部分球队只到了一位),甚至有三名外援,但大部分外援的表现都很一般。CBA现在最强小外援,当属江苏队的布莱克尼!3场比赛,布莱克尼场均出战39分钟,CBA林书豪0分,张宁末节12分,射手9记三分威胁顾全广州队对阵山西队的比赛,林书豪和常林本赛季都离开首钢队,迎来两人的首次对阵。上半场比赛贝尔钉板大帽,李炎哲篮下打进,邢志强打开三分账户,陈盈骏突破得手,费尔德骑马射箭连续得分,两队又遭歧视!世锦赛得分王哭着要退出国家队!曾被嘲笑为大猩猩2022年世界女排锦标赛尘埃落定,塞尔维亚女排战胜巴西女排成功卫冕世锦赛冠军,巴西女排四次打进世锦赛决赛四次获得亚军,堪称世锦赛最悲惨球队,而赛前被誉为是最大夺冠热门的意大利女排在丁俊晖41横扫冲冠,147分先生VS卫冕冠军,赵心童颜丙涛迎德比北京时间10月16日消息,2022斯诺克北爱尔兰开赛将正式开赛,中国一哥丁俊晖英锦赛冠军赵心童大师赛冠军颜丙涛将出战比赛。首个比赛日,赵心童颜丙涛两人都是德比战,而刚刚打出满分14