当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 23:34:52 Java

不仅发布了SpringBoot2.7.0版本,还第一时间支持了之前开源脚手架项目mall-tiny的升级!有朋友提出升级商城项目,所以最近抽空升级了!不仅支持最新版本的SpringBoot,使用的技术栈也基本升级到最新!今天分享一下升级内容以及升级过程中遇到的一些问题,大家可以参考一下!SpringBoot实战电商项目商城(50k+star)地址:https://github.com/macrozheng/mall技术栈升级商城项目采用当前主流技术实现。这些主流技术基本都升级到了最新的稳定版。具体升级内容可参考下表。技术发布说明SpringBoot2.3.0->2.7.0Container+MVCFrameworkSpringSecurity5.1.4->5.7.1认证授权框架MyBatis3.4.6->3.5.9ORMFrameworkMyBatisGenerator1.3.3->1.4.1DataLayerCodeGenerationRabbitMQ3.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-pluginsspotify->fabric8应用打包成Docker镜像在升级Maven插件的过程中遇到了一些问题。这里我整理一下,给想升级这个技术栈的朋友一个参考!支持SpringBoot2.7.0看之前用的2.3.0版本。这是一年前的支持终止。还是需要升级2.7.0。升级到2.7.0版本不仅仅是更改版本号。由于SpringBoot2.6.x开始默认禁用循环依赖,如果你的项目中循环依赖过多,只能通过如下配置开启。spring:main:allow-circular-references:true既然官方禁止了,那我们就应该从源头上解决循环依赖。如何优雅的解决循环依赖问题可以参考mall-tiny升级支持SpringBoot2.7.0来解决循环依赖部分,mall项目也使用了这种优雅的方法。在Swagger切换到Starter之前,项目是直接使用Swagger依赖集成的,并没有使用Starter。这次改用了。io.springfoxspringfox-boot-starter3.0.0升级SpringBoot2.6.x版本时,Swagger其实存在一定的兼容性问题。您需要在配置中添加BeanPostProcessorBean。详见升级SpringBoot2.6.x版本后无法使用Swagger。SpringSecurity使用升级升级SpringBoot2.7.0后,SpringSecurity中一个重要的类被弃用了,即WebSecurityConfigurerAdapter,它被用作配置类。新的用法很简单,不需要继承WebSecurityConfigurerAdapter,直接声明配置类,配置一个生成SecurityFilterChainBean的方法,将原来的HttpSecurity配置移到这个方法即可。商城项目也采用了这种新用法。/***SpringSecurity5.4.x及以上新使用配置*为避免循环依赖,仅用于配置HttpSecurity*2022/5/19由宏创建。*/@ConfigurationpublicclassSecurityConfig{@BeanSecurityFilterChainfilterChain(HttpSecurityhttpSecurity)throwsException{//省略HttpSecurity的配置returnhttpSecurity.build();}}SpringSecurity最新版本的使用方法可以参考SpringSecurity的最新使用方法。MyBatis升级在升级MyBatis的过程中,MySQL驱动版本也从8.0.16升级到了8.0.29。mysqlmysql-connector-java8.0.29之前有小伙伴提出升级到这个版本,在Linux无法连接MySQL数据库,其实是因为默认使用SSL连接,在配置文件中加入useSSL=false配置即可解决。spring:datasource:url:jdbc:mysql://db:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=falseusername:readerpassword:123456ELK日志采集系统升级其实就是每次升级SpringBoot版本时间,如果集成Elasticsearch,基本要升级ES,然后整套ELK组件都要升级,这次全部升级到7.17.3版本。为什么要升级这个版本?因为SpringBoot2.7.0使用的JavaSDK默认兼容这个版本。不得不说ES的各个版本的JavaSDK的兼容性都很差。如果还是使用之前的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远程访问地址后,双击打包命令,即可实现应用镜像的一键打包上传。部署文档更新项目的部署文档也同步更新。有关详细信息,请参阅以下链接。Windows环境下商城的部署https://www.macrozheng.com/ma...mallLinux环境下的部署(基于Docker容器)https://www.macrozheng.com/ma...mallinLinux下的部署环境(基于DockerCompose)https://www.macrozheng.com/ma...总结今天分享一下商城项目的升级内容以及升级过程中遇到的一些问题。不得不说SpringBoot确实是一个Greatframework,升级到2.7.0跨越了几个大版本,几乎没有代码改动。SpringBoot2.7版本很有可能成为咬指甲的版本,因为Java17的最低要求是从SpringBoot3.0开始的,大家可以尝试升级到这个版本!不容易开源项目源代码地址。如果您觉得项目有帮助,请点Star支持一下!https://github.com/macrozheng...