Mall 电商实战项目全面升级!支持最新版 SpringBoot,干掉循环依赖
前不久,SpringBoot 2.7.0 版本发布了,我也是第一时间把之前开源的脚手架项目 mall-tiny 给升级支持了!有的小伙伴提出把 mall 项目也升级下,于是我最近抽空把它给升级了!不仅是支持了最新版 SpringBoot,使用到的技术栈基本都升级到最新了!今天分享下升级内容和升级过程中遇到的一些问题,大家可以参考下!
技术栈升级
mall 项目采用现阶主流技术实现,这些主流技术基本都升级了目前最新稳定版,具体升级内容大家可以参考下表。
升级过程
升级过程中遇到一些问题,这里整理了下,给想要升级这套技术栈的小伙伴一个参考!
支持 SpringBoot 2.7.0
看了下之前使用的 2.3.0 版本,一年前就 End of Support 了,升级 2.7.0 还是很有必要的。
升级 2.7.0 版本不仅是改个版本号就行了,由于 SpringBoot2.6.x 版本开始默认禁用了循环依赖,如果你的项目中循环依赖太多的话,只能使用如下配置开启了。
既然官方都禁止使用了,我们还是从源头上解决循环依赖的好,如何优雅地解决循环依赖问题具体可以参考 mall-tiny 升级支持 SpringBoot 2.7.0 中的解决循环依赖部分,mall 项目也使用了这种优雅的方式。
Swagger 改用 Starter
之前项目中是直接使用 Swagger 依赖来集成的,并没有用 Starter,这次改用了它。
在升级 SpringBoot 2.6.x 版本的时候,其实 Swagger 就有一定的兼容性问题,需要在配置中添加 BeanPostProcessor 这个 Bean,具体可以参考升级 SpringBoot 2.6.x 版本后,Swagger 没法用了。
SpringSecurity 用法升级
在升级 SpringBoot2.7.0 版本后,SpringSecurity 中有个重要的类被弃用了,那就是一直作为配置类使用的 WebSecurityConfigurerAdapter。
新用法非常简单,无需再继承 WebSecurityConfigurerAdapter,只需直接声明配置类,再配置一个生成 SecurityFilterChainBean 的方法,把原来的 HttpSecurity 配置移动到该方法中即可,mall 项目也采用了这种新用法。
最新版 Spring Security 用法具体可以参考 Spring Security 最新用法 。
MyBatis 升级
在升级 MyBatis 的过程中,也升级了 MySQL 的驱动版本,从 8.0.16 升级到了 8.0.29。
之前有小伙伴提出升级到该版本后,在 Linux 上无法连接到 MySQL 数据库,其实是因为默认使用了 SSL 连接导致的,在配置文件中添加 useSSL=false 配置即可解决。
ELK 日志收集系统升级
其实每次升级 SpringBoot 版本,如果集成了 Elasticsearch 都基本要升级 ES,然后整套 ELK 组件都得升级,这次全部升级到了 7.17.3 版本。
为什么升级该版本呢?因为 SpringBoot2.7.0 使用的 Java SDK 默认兼容该版本。
不得不说 ES 的 Java SDK 各版本兼容性很差,如果还是使用之前的 7.6.2 版本的话,运行 mall-search 中的单元测试代码会出现如下问题。很多小伙伴使用 ES 出现一些稀奇古怪的问题,大概率是版本兼容性问题。
看一眼升级后的日志收集系统,Kibana 的界面更现代化了!
MongoDB 升级
MongoDB 升级 5.0 用法基本和之前一致,但是在部署到 Docker 环境时发现,MongoDB5.0 居然需要特定 CPU 支持,只得改用 4.x 版本了。
镜像打包插件改用 fabric8io
之前一直使用的是 spotify 出品的 docker-maven-plugin,用于打包应用 Docker 镜像并上传到服务器。上了下官网,这个插件基本上是不维护了,之前也有小伙伴反馈使用有问题。
现在改用了 fabric8 出品的 docker-maven-plugin,功能更强大,更新也比较及时。
虽然插件换了,但用法还是一样的,配置好 docker 远程访问地址后直接双击 package 命令就可以实现一键打包上传应用镜像了。
部署文档更新
项目的部署文档也同步更新了,具体可以参考以下链接。
mall 在 Windows 环境下的部署
https://www.macrozheng.com/mall/deploy/mall_deploy_windows.html
mall 在 Linux 环境下的部署(基于 Docker 容器)
https://www.macrozheng.com/mall/deploy/mall_deploy_docker.html
mall 在 Linux 环境下的部署(基于 Docker Compose)
https://www.macrozheng.com/mall/deploy/mall_deploy_docker_compose.html
总结
今天分享了一下 mall 项目的升级内容和升级过程中遇到的一些问题,不得不说,SpringBoot 确实是个很棒的框架,跨了几个大版本升级到 2.7.0,代码几乎无需改动。SpringBoot 2.7 版本很可能成为一个钉子户版本,因为从 SpringBoot 3.0 开始最低要求 Java 17 了,大家可以尝试下升级到该版本!
项目源码地址
开源不易,觉得项目有帮助的小伙伴点个 Star 支持下吧!
评论