前不只,SpringBoot 2.7.0 版别发布了,我也是第一时间把之前开源的脚手架项目mall-tiny 给晋级支撑了!有的小伙伴提出把mall项目也晋级下,所以我最近抽空把它给晋级了!不只是支撑了最新版SpringBoot,运用到的技能栈根本都晋级到最新了!今日共享下晋级内容和晋级进程中遇到的一些问题,我们能够参阅下!

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

技能栈晋级

mall项目采用现阶主流技能实现,这些主流技能根本都晋级了现在最新稳定版,详细晋级内容我们能够参阅下表。

技能 版别 阐明
SpringBoot 2.3.0->2.7.0 容器+MVC结构
SpringSecurity 5.1.4->5.7.1 认证和授权结构
MyBatis 3.4.6->3.5.9 ORM结构
MyBatisGenerator 1.3.3->1.4.1 数据层代码生成
RabbitMQ 3.7.14->3.10.5 消息队列
Redis 5.0->7.0 分布式缓存
MongoDB 4.2.5->5.0 NoSql数据库
Elasticsearch 7.6.2->7.17.3 搜索引擎
LogStash 7.6.2->7.17.3 日志搜集东西
Kibana 7.6.2->7.17.3 日志可视化检查东西
Nginx 1.10->1.22 静态资源服务器
Druid 1.1.10->1.2.9 数据库衔接池
MinIO 7.1.0->8.4.1 目标存储
Hutool 5.4.0->5.8.0 Java东西类库
PageHelper 5.2.0->5.3.0 MyBatis物理分页插件
Swagger-UI 2.9.2->3.0.0 文档生成东西
logstash-logback-encoder 5.3->7.2 Logstash日志搜集插件
docker-maven-plugin spotify->fabric8 应用打包成Docker镜像的Maven插件

晋级进程

晋级进程中遇到一些问题,这儿整理了下,给想要晋级这套技能栈的小伙伴一个参阅!

支撑SpringBoot 2.7.0

看了下之前运用的2.3.0版别,一年前就End of Support了,晋级2.7.0仍是很有必要的。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

晋级2.7.0版别不只是改个版别号就行了,由于SpringBoot2.6.x版别开始默许禁用了循环依靠,假如你的项目中循环依靠太多的话,只能运用如下装备敞开了。

spring:
main:
allow-circular-references:true

既然官方都制止运用了,我们仍是从源头上处理循环依靠的好,怎么高雅地处理循环依靠问题详细能够参阅mall-tiny晋级支撑SpringBoot 2.7.0 中的处理循环依靠部分,mall项目也运用了这种高雅的办法。

Swagger改用Starter

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

<!--Swagger-UIAPI文档生产东西-->
<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

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

新用法十分简单,无需再承继WebSecurityConfigurerAdapter,只需直接声明装备类,再装备一个生成SecurityFilterChainBean的办法,把本来的HttpSecurity装备移动到该办法中即可,mall项目也采用了这种新用法。

/**
*SpringSecurity5.4.x以上新用法装备
*为避免循环依靠,仅用于装备HttpSecurity
*Createdbymacroon2022/5/19.
*/
@Configuration
publicclassSecurityConfig{
@Bean
SecurityFilterChainfilterChain(HttpSecurityhttpSecurity)throwsException{
//省略HttpSecurity的装备
returnhttpSecurity.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默许兼容该版别。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

不得不说ES的Java SDK各版别兼容性很差,假如仍是运用之前的7.6.2版别的话,运行mall-search中的单元测试代码会出现如下问题。很多小伙伴运用ES出现一些八怪七喇的问题,大概率是版别兼容性问题。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

看一眼晋级后的日志搜集体系,Kibana的界面更现代化了!

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

MongoDB晋级

MongoDB晋级5.0用法根本和之前共同,但是在布置到Docker环境时发现,MongoDB5.0居然需求特定CPU支撑,只得改用4.x版别了。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

镜像打包插件改用fabric8io

之前一向运用的是spotify出品的docker-maven-plugin,用于打包应用Docker镜像并上传到服务器。上了下官网,这个插件根本上是不保护了,之前也有小伙伴反应运用有问题。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

现在改用了fabric8出品的docker-maven-plugin,功能更强壮,更新也比较及时。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

虽然插件换了,但用法仍是相同的,装备好docker远程访问地址后直接双击package命令就能够实现一键打包上传应用镜像了。

Mall电商实战项目全面晋级!支撑最新版SpringBoot,彻底处理循环依靠...

布置文档更新

项目的布置文档也同步更新了,详细能够参阅以下链接。

www.macrozheng.com/mall/deploy…

  • mall在Linux环境下的布置(根据Docker容器)

www.macrozheng.com/mall/deploy…

  • mall在Linux环境下的布置(根据Docker Compose)

www.macrozheng.com/mall/deploy…

总结

今日共享了一下mall项目的晋级内容和晋级进程中遇到的一些问题,不得不说,SpringBoot确实是个很棒的结构,跨了几个大版别晋级到2.7.0,代码简直无需改动。SpringBoot 2.7 版别很可能成为一个钉子户版别,由于从SpringBoot 3.0 开始最低要求Java 17了,我们能够尝试下晋级到该版别!

项目源码地址

开源不易,觉得项目有协助的小伙伴点个Star支撑下吧!

github.com/macrozheng/…