前不仅,SpringBoot 2.7.0 版本公布了,我也是第一工夫把之前开源的脚手架我的项目 mall-tiny 给降级反对了!有的小伙伴提出把 mall 我的项目也降级下,于是我最近抽空把它给降级了!不仅是反对了最新版 SpringBoot,应用到的技术栈根本都降级到最新了!明天分享下降级内容和降级过程中遇到的一些问题,大家能够参考下!
SpringBoot 实战电商我的项目 mall(50k+star)地址:https://github.com/macrozheng/mall
技术栈降级
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
还是很有必要的。
降级 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/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…