Mall电商实战项目全面升级,支持最新版SpringBoot,彻底解决循环依赖...

前不仅,SpringBoot 2.7.0 版本发布了,我也是第一时间把之前开源的脚手架项目mall-tiny 给升级支持了!有的小伙伴提出把mall项目也升级下,于是我最近抽空把它给升级了!不仅是支持了最新版SpringBoot,使用到的技术栈基本都升级到最新了!今天分享下升级内容和升级过程中遇到的一些问题,大家可以参考下!

SpringBoot实战电商项目mall(50k+star)地址:https://github.com/macrozheng/mall

技术栈升级

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

技术版本说明
SpringBoot2.3.0->2.7.0容器+MVC框架
SpringSecurity5.1.4->5.7.1认证和授权框架
MyBatis3.4.6->3.5.9ORM框架
MyBatisGenerator1.3.3->1.4.1数据层代码生成
RabbitMQ3.7.14->3.10.5消息队列
Redis5.0->7.0分布式缓存
MongoDB4.2.5->5.0NoSql数据库
Elasticsearch7.6.2->7.17.3搜索引擎
LogStash7.6.2->7.17.3日志收集工具
Kibana7.6.2->7.17.3日志可视化查看工具
Nginx1.10->1.22静态资源服务器
Druid1.1.10->1.2.9数据库连接池
MinIO7.1.0->8.4.1对象存储
Hutool5.4.0->5.8.0Java工具类库
PageHelper5.2.0->5.3.0MyBatis物理分页插件
Swagger-UI2.9.2->3.0.0文档生成工具
logstash-logback-encoder5.3->7.2Logstash日志收集插件
docker-maven-pluginspotify->fabric8应用打包成Docker镜像的Maven插件

升级过程

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

支持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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电商系统项目进度及人员安排管理是确保项目按时交付的关键方面。以下是对这一问题的回答。 首先,项目进度管理是通过制定详细的项目计划和时间表来监控和管理项目进展。我们会针对Mall电商系统项目制定一个明确的工作计划,包含各个阶段的任务、里程碑和交付日期。每个任务都会有对应的负责人,负责监督并确保任务按时完成。我们还会定期召开项目会议,评估项目进展,并及时调整计划以应对任何延迟或风险。 其次,人员安排管理是确定项目所需的人员和他们的角色。我们会根据Mall电商系统项目的需求,确定不同的职能团队,例如项目经理、开发人员、设计师和测试人员等。每个团队成员都会有明确的职责和工作分配。我们会进行适当的资源分配,确保团队有足够的人力和技能来完成项目。 此外,我们还会实施有效的沟通和协调机制,确保团队成员之间的合作和信息共享。团队之间的沟通可以通过例会、进度报告和电子沟通工具来实现。我们会建立一个良好的信息共享平台,以便团队成员可以随时查看项目的进展,并及时解决任何问题。 最后,我们会定期评估项目的进展并进行风险管理。如果项目进展存在延误或风险,我们会及时采取措施,例如调整资源、重新安排任务或加强沟通,以确保项目能够按时交付。 综上所述,mall电商系统项目进度及人员安排管理是一个综合性的任务。通过制定明确的计划、分配合适的人力资源、建立有效的沟通渠道以及对项目进行评估和风险管理,我们可以确保项目按时交付,并实现项目的成功实施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值