前不仅,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. */@Configurationpublic 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/ma...
  • mall在Linux环境下的部署(基于Docker容器)
https://www.macrozheng.com/ma...
  • mall在Linux环境下的部署(基于Docker Compose)
https://www.macrozheng.com/ma...

总结

明天分享了一下mall我的项目的降级内容和降级过程中遇到的一些问题,不得不说,SpringBoot的确是个很棒的框架,跨了几个大版本升级到2.7.0,代码简直无需改变。SpringBoot 2.7 版本很可能成为一个钉子户版本,因为从SpringBoot 3.0 开始最低要求Java 17了,大家能够尝试下降级到该版本!

我的项目源码地址

开源不易,感觉我的项目有帮忙的小伙伴点个Star反对下吧!

https://github.com/macrozheng...