Mall电商实战项目全面升级!支持最新版SpringBoot,干掉循环依赖

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 技术栈升级mall项目采用现阶主流技术实现,这些主流技术基本都升级了目前最新稳定版,具体升级内容大家可以参考下表。技术版本说明

技术栈升级

mall项目采用现阶主流技术实现,这些主流技术基本都升级了目前最新稳定版,具体升级内容大家可以参考下表。

技术版本说明

网络异常,图片无法展示
|


升级过程

升级过程中遇到一些问题,这里整理了下,给想要升级这套技术栈的小伙伴一个参考!

支持SpringBoot 2.7.0

看了下之前使用的2.3.0版本,一年前就End of Support了,升级2.7.0还是很有必要的。

网络异常,图片无法展示
|

升级2.7.0版本不仅是改个版本号就行了,由于SpringBoot2.6.x版本开始默认禁用了循环依赖,如果你的项目中循环依赖太多的话,只能使用如下配置开启了。

spring:
  main:
    allow-circular-references: true

既然官方都禁止使用了,我们还是从源头上解决循环依赖的好,如何优雅地解决循环依赖问题具体可以参考mall-tiny升级支持SpringBoot 2.7.0 中的解决循环依赖部分,mall项目也使用了这种优雅的方式。

Swagger改用Starter

之前项目中是直接使用Swagger依赖来集成的,并没有用Starter,这次改用了它。

<!--Swagger-UI API文档生产工具-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

在升级SpringBoot 2.6.x版本的时候,其实Swagger就有一定的兼容性问题,需要在配置中添加BeanPostProcessor这个Bean,具体可以参考升级 SpringBoot 2.6.x 版本后,Swagger 没法用了 。

SpringSecurity用法升级

在升级SpringBoot2.7.0版本后,SpringSecurity中有个重要的类被弃用了,那就是一直作为配置类使用的WebSecurityConfigurerAdapter

网络异常,图片无法展示
|

新用法非常简单,无需再继承WebSecurityConfigurerAdapter,只需直接声明配置类,再配置一个生成SecurityFilterChainBean的方法,把原来的HttpSecurity配置移动到该方法中即可,mall项目也采用了这种新用法。

/**
 * SpringSecurity 5.4.x以上新用法配置
 * 为避免循环依赖,仅用于配置HttpSecurity
 * Created by macro on 2022/5/19.
 */
@Configuration
public class SecurityConfig {
    @Bean
    SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        //省略HttpSecurity的配置
        return httpSecurity.build();
    }
}

最新版Spring Security用法具体可以参考Spring Security 最新用法 。

MyBatis升级

在升级MyBatis的过程中,也升级了MySQL的驱动版本,从8.0.16升级到了8.0.29

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>

之前有小伙伴提出升级到该版本后,在Linux上无法连接到MySQL数据库,其实是因为默认使用了SSL连接导致的,在配置文件中添加useSSL=false配置即可解决。

spring:
  datasource:
    url: jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
    username: reader
    password: 123456

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支持下吧!

https://github.com/macrozheng/mall

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
消息中间件 NoSQL Java
spring boot2升级boot3指南
本文介绍了如何将Spring Boot 2.x升级至Spring Boot 3.x,涵盖使用OpenRewrite自动化重构工具进行代码转换、依赖版本升级、配置属性调整及常见问题处理等内容,帮助开发者高效完成升级工作。
2140 6
|
6月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1082 3
|
4月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
5月前
|
消息中间件 Ubuntu Java
SpringBoot整合MQTT实战:基于EMQX实现双向设备通信
本教程指导在Ubuntu上部署EMQX 5.9.0并集成Spring Boot实现MQTT双向通信,涵盖服务器搭建、客户端配置及生产实践,助您快速构建企业级物联网消息系统。
2154 1
|
10月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
7月前
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
457 3
|
7月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
757 3
|
7月前
|
Java 关系型数据库 MySQL
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
springboot项目集成dolphinscheduler调度器 实现datax数据同步任务
757 2
|
7月前
|
分布式计算 Java 大数据
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
springboot项目集成dolphinscheduler调度器 可拖拽spark任务管理
425 2
|
7月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
317 0