当前位置: 首页 > article >正文

保姆级教程:手把手教你将若依(RuoYi)项目从Java 8迁移到Java 17(含Spring Boot 3升级)

保姆级教程手把手教你将若依(RuoYi)项目从Java 8迁移到Java 17含Spring Boot 3升级最近几年Java生态发生了翻天覆地的变化从Java 8到Java 17不仅仅是版本号的跳跃更是一次技术栈的全面革新。作为国内广泛使用的快速开发框架若依(RuoYi)系统也需要与时俱进。本文将带你完整走过从Java 8到Java 17的升级之路涵盖Spring Boot 3适配、依赖调整、配置修改等关键环节确保你的项目平稳过渡到最新技术栈。1. 环境准备与基础配置升级前的准备工作至关重要这决定了后续操作能否顺利进行。首先需要确保开发环境已经就绪JDK 17安装推荐使用Azul Zulu或Oracle JDK 17 LTS版本IDE支持IntelliJ IDEA 2023或Eclipse 2023确保完全支持Java 17语法Maven配置建议使用Maven 3.9版本并在settings.xml中配置好镜像源提示在团队协作环境中建议统一开发工具版本避免因环境差异导致的问题。安装完成后验证环境配置是否正确java -version # 应显示类似openjdk version 17.0.10 2024-01-16 LTS mvn -v # 应显示Apache Maven 3.9.x2. 父POM全局版本升级父POM是整个项目的依赖管理中心升级时需要特别注意版本兼容性。以下是关键修改点2.1 基础属性配置properties !-- Java版本设置 -- java.version17/java.version maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target !-- Spring生态版本 -- spring-boot.version3.2.5/spring-boot.version spring-framework.version6.2.6/spring-framework.version spring-security.version6.2.3/spring-security.version !-- 数据相关 -- mybatis.plus.version3.5.5/mybatis.plus.version mybatis-spring.version3.0.3/mybatis-spring.version mysql-connector-j.version8.1.0/mysql-connector-j.version !-- 其他关键依赖 -- tomcat.version10.1.24/tomcat.version logback.version1.4.14/logback.version jakarta.servlet-api.version6.0.0/jakarta.servlet-api.version /properties2.2 依赖管理调整Java 17环境下许多依赖需要特殊处理dependencyManagement dependencies !-- 数据库连接池 -- dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-3-starter/artifactId version${druid.version}/version /dependency !-- Servlet API迁移到Jakarta EE -- dependency groupIdjakarta.servlet/groupId artifactIdjakarta.servlet-api/artifactId version${jakarta.servlet-api.version}/version /dependency !-- MyBatis适配Spring Boot 3 -- dependency groupIdorg.mybatis.spring.boot/groupId artifactIdmybatis-spring-boot-starter/artifactId version${mybatis-spring.version}/version /dependency /dependencies /dependencyManagement3. 模块级适配改造3.1 ruoyi-admin模块调整作为核心业务模块需要特别注意dependencies !-- MySQL驱动更新 -- dependency groupIdcom.mysql/groupId artifactIdmysql-connector-j/artifactId /dependency !-- 移除javax.servlet相关依赖 -- !-- 新增jakarta.servlet支持 -- /dependencies3.2 ruoyi-common模块改造公共模块包含大量基础组件需要全面检查dependencies !-- Servlet API替换为Jakarta -- dependency groupIdjakarta.servlet/groupId artifactIdjakarta.servlet-api/artifactId /dependency !-- 验证码组件排除旧版servlet依赖 -- dependency groupIdpro.fessional/groupId artifactIdkaptcha/artifactId exclusions exclusion groupIdjakarta.servlet/groupId artifactIdservlet-api/artifactId /exclusion /exclusions /dependency /dependencies3.3 ruoyi-framework框架层适配框架层涉及核心配置需要谨慎处理dependencies !-- 使用Spring Boot 3兼容的Druid starter -- dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-3-starter/artifactId /dependency /dependencies4. 关键配置类修改实战4.1 Druid数据源配置数据库连接池配置需要适配新版本// 修改前导入 import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; // 修改后导入 import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceBuilder; import com.alibaba.druid.spring.boot3.autoconfigure.properties.DruidStatProperties;4.2 安全配置全面升级Spring Security 6.x配置方式有重大变化Bean protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { return httpSecurity // CSRF禁用 .csrf(AbstractHttpConfigurer::disable) // 头部配置 .headers(header - header .cacheControl(HeadersConfigurer.CacheControlConfig::disable) .frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)) // 认证失败处理 .exceptionHandling(exception - exception .authenticationEntryPoint(unauthorizedHandler)) // 无状态session .sessionManagement(session - session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) // 权限配置 .authorizeHttpRequests(requests - { permitAllUrl.getUrls().forEach(url - requests.requestMatchers(url).permitAll()); requests.requestMatchers(/login, /register, /captchaImage).permitAll() .requestMatchers(HttpMethod.GET, /, /*.html, /**/*.html, /**/*.css, /**/*.js, /profile/**).permitAll() .requestMatchers( /swagger-ui.html, /swagger-resources/**, /webjars/**, /*/api-docs, /druid/**).permitAll() .anyRequest().authenticated(); }) // 退出处理 .logout(logout - logout .logoutUrl(/logout) .logoutSuccessHandler(logoutSuccessHandler)) // 过滤器配置 .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) .addFilterBefore(corsFilter, LogoutFilter.class) .build(); }4.3 路径匹配处理改造Spring 6路径匹配机制变化需要适配Override public void afterPropertiesSet() { // 获取HandlerMapping RequestMappingHandlerMapping mapping applicationContext.getBean( requestMappingHandlerMapping, RequestMappingHandlerMapping.class); MapRequestMappingInfo, HandlerMethod map mapping.getHandlerMethods(); map.keySet().forEach(info - { HandlerMethod handlerMethod map.get(info); // 方法级别注解处理 Anonymous method AnnotationUtils.findAnnotation( handlerMethod.getMethod(), Anonymous.class); Optional.ofNullable(method).ifPresent(anonymous - Objects.requireNonNull(info.getPathPatternsCondition().getPatternValues()) .forEach(url - urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); // 类级别注解处理 Anonymous controller AnnotationUtils.findAnnotation( handlerMethod.getBeanType(), Anonymous.class); Optional.ofNullable(controller).ifPresent(anonymous - Objects.requireNonNull(info.getPathPatternsCondition().getPatternValues()) .forEach(url - urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); }); }5. 验证与问题排查完成所有修改后按以下步骤验证编译检查执行mvn clean compile确保无编译错误单元测试运行mvn test验证核心功能启动应用通过mvn spring-boot:run启动服务接口测试使用Postman或Swagger测试关键接口常见问题及解决方案问题现象可能原因解决方案ClassNotFoundException: javax/servlet/xxxServlet API未迁移检查是否全部替换为jakarta.servlet启动时Bean创建失败依赖版本冲突使用mvn dependency:tree分析依赖树安全配置不生效Spring Security 6配置方式变化检查是否使用新式Lambda DSL配置路径匹配失败Spring 6路径匹配机制变化检查是否使用requestMatchers升级过程中遇到问题时可以尝试以下排查命令# 查看依赖冲突 mvn dependency:tree -Dincludescom.alibaba:druid # 清理并重新构建 mvn clean install -U # 跳过测试快速验证 mvn spring-boot:run -DskipTests6. 升级后的优化建议成功升级到Java 17后可以考虑以下优化方向启用新语言特性如模式匹配、文本块等Java 17特性性能调优Java 17的ZGC或Shenandoah垃圾收集器模块化改造逐步引入Java模块系统持续集成优化在CI/CD流水线中加入Java 17兼容性检查实际项目中我们发现Spring Boot 3的启动速度比2.x版本提升了约30%内存占用也有所降低。特别是在云原生环境下新版本的适应性更好。

相关文章:

保姆级教程:手把手教你将若依(RuoYi)项目从Java 8迁移到Java 17(含Spring Boot 3升级)

保姆级教程:手把手教你将若依(RuoYi)项目从Java 8迁移到Java 17(含Spring Boot 3升级) 最近几年Java生态发生了翻天覆地的变化,从Java 8到Java 17不仅仅是版本号的跳跃,更是一次技术栈的全面革新。作为国内广泛使用的…...

Deepfake Offensive Toolkit实战:视频会议系统渗透测试案例

Deepfake Offensive Toolkit实战:视频会议系统渗透测试案例 【免费下载链接】dot The Deepfake Offensive Toolkit 项目地址: https://gitcode.com/gh_mirrors/dot/dot 想要了解如何利用深度伪造技术进行视频会议系统安全测试吗?Deepfake Offensi…...

专访越擎科技创始人: 外骨骼的设计与仿真该如何入门

具身智能机器人领域的技术创新如火如荼,从轮式机器人,人形机器人,四足机器狗等不一而足。而从分类来看,外骨骼机器人作为增强人的能力的典型应用,不仅在医疗领域发挥重要作用,在工业应用等场景中也大大的增…...

从零到一:手把手教你用海康VisionMaster完成第一个字符识别项目(附完整流程与避坑点)

从零到一:手把手教你用海康VisionMaster完成第一个字符识别项目(附完整流程与避坑点) 在工业自动化领域,字符识别技术正逐渐成为生产线上的"眼睛"。无论是产品追溯码读取、包装日期检测,还是仪表盘数值记录&…...

机器人离线编程专访:我是SiemensMCD与pdps用户,该不该切换为国产机器人设计与仿真软件iRobotCAM

摘要: 作为Siemens MCD与PDPS的用户,我从PDPS切换到其它软件时会考虑哪些因素,该不该切换到国产的iRobotCAM,本文通过专该机器人设计与仿真软件专家的形式,提供行业从业者的视角,阐述iRobotCAM的产品特点与适用性。工业…...

Beyond Compare 5密钥生成器:专业文件对比工具的永久激活方案

Beyond Compare 5密钥生成器:专业文件对比工具的永久激活方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否正在为Beyond Compare 5的30天评估期到期而烦恼?这款…...

金融Agent再获近2亿加码!启明红杉高瓴集体押注,5个月内连获两轮融资

允中 发自 凹非寺量子位 | 公众号 QbitAI近日,金融AI领跑者讯兔科技(Alpha派)正式完成近2亿元A轮融资。继去年10月完成超亿元Pre-A轮融资后,讯兔科技在短短5个月内再获顶级机构强强加持。本轮由启明创投、红杉中国、高瓴创投共同领…...

终极指南:如何在Open Interpreter中快速集成vLLM高速推理引擎

终极指南:如何在Open Interpreter中快速集成vLLM高速推理引擎 【免费下载链接】open-interpreter Open Interpreter 工具能够让大型语言模型在本地执行如Python、JavaScript、Shell等多种编程语言的代码。 项目地址: https://gitcode.com/GitHub_Trending/op/open…...

Zotero Style插件:如何通过3个核心功能让文献管理效率提升200%?

Zotero Style插件:如何通过3个核心功能让文献管理效率提升200%? 【免费下载链接】zotero-style zotero-style - 一个 Zotero 插件,提供了一系列功能来增强 Zotero 的用户体验,如阅读进度可视化和标签管理,适合研究人员…...

Windows服务器部署:OpenClaw守护进程+Qwen3-32B镜像长期运行

Windows服务器部署:OpenClaw守护进程Qwen3-32B镜像长期运行 1. 为什么需要服务器级部署? 去年我尝试在个人笔记本上运行OpenClaw时,经常遇到两个头疼的问题:一是夜间执行任务时电脑休眠导致流程中断,二是长时间运行后…...

2025夏季技术实习「抢位战」:3步解锁2500+优质机会(附避坑指南)[特殊字符]

2025夏季技术实习「抢位战」:3步解锁2500优质机会(附避坑指南)🔥 【免费下载链接】Summer2026-Internships 2025年夏季技术实习机会集合! 项目地址: https://gitcode.com/GitHub_Trending/su/Summer2026-Internships…...

3个步骤掌握FCEUX:开源NES模拟器的全方位应用指南

3个步骤掌握FCEUX:开源NES模拟器的全方位应用指南 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux FCEUX是一款功能强大的开源NES模拟器(任天堂娱乐系统游戏模拟工具),以…...

SDXL 1.0电影级绘图工坊高清图集:1536px输出下4K显示器全屏无像素感展示

SDXL 1.0电影级绘图工坊高清图集:1536px输出下4K显示器全屏无像素感展示 1. 项目简介 SDXL 1.0电影级绘图工坊是一款基于Stable Diffusion XL Base 1.0模型的AI绘图工具,专门为RTX 4090显卡优化设计。这个工具充分利用了4090显卡的24G大显存&#xff0…...

【CPython内存管理白皮书级解析】:从PyObject到ob_refcnt,看懂泄漏发生的底层5层机制

第一章:CPython内存管理的底层基石与泄漏本质CPython 的内存管理并非依赖操作系统级 malloc/free 的直接映射,而是构建在三层抽象之上的精密系统:最底层为系统内存分配器(如 mmap 或 malloc),中间层为 CPyt…...

WSABuilds旧版本归档:如何获取v2311及更早版本安装包

WSABuilds旧版本归档:如何获取v2311及更早版本安装包 【免费下载链接】WSABuilds Run Windows Subsystem For Android on your Windows 10 and Windows 11 PC using prebuilt binaries with Google Play Store (MindTheGapps) and/or Magisk or KernelSU (root solu…...

AMD GPU高效部署Ollama:专业本地大语言模型实战指南

AMD GPU高效部署Ollama:专业本地大语言模型实战指南 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/gh_mirrors/ol/ollama…...

别再只用交叉熵了!深入对比YOLOv8中Focal Loss与CIoU Loss的改进效果与适用场景

深入解析YOLOv8损失函数优化:Focal Loss与CIoU Loss的实战对比与场景适配 当你在深夜调试YOLOv8模型时,是否遇到过这样的困境:明明增加了训练数据,小目标检测的准确率却始终上不去?或是发现模型对密集排列的物体总是漏…...

当欧姆龙NX1P2遇上丰田PC10G:一次EIP实例ID通信的“踩坑”与“填坑”实录

当欧姆龙NX1P2遇上丰田PC10G:EIP实例ID通信的实战解析 在工业自动化领域,不同品牌设备间的通信集成往往充满挑战。最近一次非标设备联调项目中,我们遇到了欧姆龙NX1P2控制器与丰田PC10G设备通过EtherNet/IP(EIP)协议通…...

LFM2.5-1.2B-Thinking-GGUF实操手册:自定义system prompt提升领域适配性

LFM2.5-1.2B-Thinking-GGUF实操手册:自定义system prompt提升领域适配性 1. 模型简介与核心优势 LFM2.5-1.2B-Thinking-GGUF是Liquid AI推出的轻量级文本生成模型,专为低资源环境优化设计。该模型采用GGUF格式和llama.cpp运行时,在保持高性…...

深度 | 电子材料研发(光刻胶/OLED等)迈入智能时代,当电子材料研发进入“GPT时代”,企业该如何重构创新引擎?

【电子材料系列专题1】在半导体、显示、先进封装与电子化学品领域,材料始终决定性能上限。无论是光刻胶、OLED发光材料、封装胶,还是高纯电子特气,随着制程逼近纳米乃至埃米级节点,热力学稳定性、光化学反应精度、流变特征和痕量杂…...

LangChainJS智能代理开发:构建自主决策的AI系统完整指南

LangChainJS智能代理开发:构建自主决策的AI系统完整指南 【免费下载链接】langchainjs 项目地址: https://gitcode.com/GitHub_Trending/la/langchainjs LangChainJS是一个强大的JavaScript/TypeScript框架,专门用于构建基于大语言模型&#xff…...

保姆级教程:给你的ClickHouse 23.8装上‘仪表盘’(Prometheus+Grafana监控配置详解)

ClickHouse 23.8全链路监控实战:从Prometheus埋点到Grafana告警设计 当你的ClickHouse集群查询延迟突然从200ms飙升到5秒,是内存不足?磁盘IO瓶颈?还是并发查询堆积?本文将带你构建一套完整的监控告警体系,让…...

MangoHud与Vulkan视频编码协议:AV1监控完全指南

MangoHud与Vulkan视频编码协议:AV1监控完全指南 【免费下载链接】MangoHud A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. Discord: https://discordapp.com/invite/Gj5YmBb 项目地址: https://gitcode.com/gh_mirrors/…...

OpenClaw安全加固指南:nanobot镜像的防火墙与权限配置

OpenClaw安全加固指南:nanobot镜像的防火墙与权限配置 1. 为什么需要安全加固? 当我第一次在本地部署OpenClaw时,最让我忐忑不安的就是安全问题。这个能操控我鼠标键盘、读写文件的AI助手,会不会不小心删掉我的重要文档&#xf…...

轻量级百度搜索结果获取解决方案:让数据获取不再复杂

轻量级百度搜索结果获取解决方案:让数据获取不再复杂 【免费下载链接】python-baidusearch 自己手写的百度搜索接口的封装,pip安装,支持命令行执行。Baidu Search unofficial API for Python with no external dependencies 项目地址: http…...

Win11官方下载与优化:为FLUX小红书V2准备最佳运行环境

Win11官方下载与优化:为FLUX小红书V2准备最佳运行环境 1. 准备工作与环境检查 在开始安装FLUX小红书V2之前,我们需要确保系统环境达到最佳状态。这个图像生成工具对硬件和系统都有一定要求,特别是对GPU的性能比较敏感。 首先检查一下你的硬…...

实测2公里矿用电缆跑网络:用电力载波模块替代光纤,在井下到底靠不靠谱?

井下网络传输技术突围:电力载波在恶劣环境中的实战评估 矿场深处,昏暗潮湿的巷道里,一组工程师正为数据传输问题焦头烂额。传统光纤在煤尘弥漫的环境中频频失效,而工期又迫在眉睫。这时,有人提出了一个大胆的方案——利…...

RPA-Python与pytest-arangodb集成:10步实现ArangoDB测试自动化完整指南

RPA-Python与pytest-arangodb集成:10步实现ArangoDB测试自动化完整指南 【免费下载链接】RPA-Python Python package for doing RPA 项目地址: https://gitcode.com/gh_mirrors/rp/RPA-Python RPA-Python是一个强大的Python机器人流程自动化工具包&#xff0…...

反步法Backstepping在非线性系统自适应控制中的数学艺术

1. 反步法Backstepping的数学艺术 第一次接触反步法时,我被它精妙的数学构造深深吸引。这就像玩俄罗斯套娃,通过层层递进的方式,逐步构建出整个控制系统的稳定性。反步法的核心思想,是通过设计虚拟控制量,将复杂的非线…...

保姆级教程:CLIP-GmP-ViT-L-14图文匹配工具一键部署,小白也能玩转AI识图

保姆级教程:CLIP-GmP-ViT-L-14图文匹配工具一键部署,小白也能玩转AI识图 你是不是经常好奇,AI到底是怎么看懂图片的?给它一张照片和几个文字描述,它怎么知道哪个描述最贴切?今天,我就带你亲手搭…...