前不只,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
仍是很有必要的。
晋级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
。
新用法十分简单,无需再承继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默许兼容该版别。
不得不说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环境下的布置
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/…