モールeコマースの実際の戦闘プロジェクトが完全にアップグレードされました!最新バージョンのSpringBootをサポートし、循環依存を完全に解決します...

それだけでなく、SpringBoot 2.7.0バージョンがリリースされ、以前のオープンソースの足場プロジェクトモールもアップグレードしました-初めてです!何人かの友人がモールプロジェクトをアップグレードすることを提案したので、私は最近それをアップグレードするのに時間をかけました!最新バージョンのSpringBootがサポートされているだけでなく、使用されているテクノロジースタックは基本的に最新にアップグレードされています。今日は、アップグレードの内容と、アップグレードプロセス中に発生したいくつかの問題を共有します。参照してください。

SpringBootの実際のeコマースプロジェクトモール(50k + star)アドレス:github.com/macrozheng/…

テクノロジースタックのアップグレード

モールプロジェクトは、現在の主流技術を用いて実施されており、基本的に最新の安定版にアップグレードされています。具体的なアップグレード内容については、下表をご参照ください。

テクノロジー バージョン 説明する
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 ログ収集ツール
キバナ 7.6.2-> 7.17.3 ログ視覚化ツール
Nginx 1.10-> 1.22 静的リソースサーバー
ドルイド 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、アプリケーションのDockerdocker-maven-pluginイメージをパッケージ化してサーバーにアップロードするために使用されます。公式サイトに行くと、このプラグインは基本的にメンテナンスされておらず、以前に使用上の問題を報告している友人もいます。

今、私はより強力な機能とよりタイムリーなアップデートを備えた、fabric8生産されたものに切り替えました。docker-maven-plugin

プラグインは変更されていますが、使用法は同じです。Dockerリモートアクセスアドレスを構成した後package、コマンドを直接ダブルクリックして、ワンクリックでアプリケーションイメージをパッケージ化してアップロードできます。

展開ドキュメントの更新

プロジェクトのデプロイメントドキュメントも同期的に更新されています。詳細については、次のリンクを参照してください。

  • Windows環境でのモールの展開

www.macrozheng.com/mall/deploy…

  • Linux環境でのモールのデプロイ(Dockerコンテナーに基づく)

www.macrozheng.com/mall/deploy…

  • Linux環境でのモールのデプロイ(Docker Composeに基づく)

www.macrozheng.com/mall/deploy…

要約する

今日は、モールプロジェクトのアップグレード内容と、アップグレードプロセスで発生したいくつかの問題を共有しました。SpringBootは確かに優れたフレームワークであり、いくつかのメジャーバージョン間2.7.0でアップグレードされており、コードを変更する必要はほとんどありません。SpringBoot2.7バージョンは厄介なバージョンになる可能性があります。SpringBoot3.0以降は最低限のJava17が必要なので、このバージョンへのアップグレードを試すことができます。

プロジェクトのソースコードアドレス

オープンソースは簡単ではありません。プロジェクトが役に立ったと思われる場合は、クリックしてStarサポートしてください。

github.com/macrozheng/…

おすすめ

転載: juejin.im/post/7116694234236715038