我开源的 waynboot-mall 项目之框架选型详解

2024-02-03 17:03:18 浏览数 (1)

waynboot-mall 服务端项目基础开发框架是基于最新得 Spring Boot3.0 版本,整合了 Mybtis Plus、Spring Security、Redis、RabbitMQ、ElasticSearch、xxl-job、Nginx 等常用中间件,提供了一套完整的可生产使用的商城项目技术解决方案。

本文我就给大家讲解一下这个项目的框架以及中间件选型,帮助大家了解这个项目使用了哪些技术。

技术选型一览

系统组件

采用技术

官网

1

基础框架

Spring Boot3.0

https://spring.io/projects/spring-boot

2

访问控制

Spring Security

https://spring.io/projects/spring-security

3

ORM 框架

MyBatis-Plus3.5

https://baomidou.com

4

工具类库

hutool

https://hutool.cn

5

流量网关、网关安全

openresty

https://openresty.org/cn

6

日志记录

Nginx

https://logback.qos.ch

7

数据库连接池

HikariCP

https://github.com/brettwooldridge/HikariCP

8

Redis 客户端

Lettuce

https://lettuce.io

9

全文搜索

ElasticSearch

https://www.elastic.co

10

消息队列

RabbitMQ

https://www.rabbitmq.com

11

定时任务

xxl-job

https://www.xuxueli.com/xxl-job

12

服务监控

spring-boot-admin

https://docs.spring-boot-admin.com/current/getting-started.html

基础开发框架-Spring Boot3

Spring Boot 是一个基于 Spring 的快速开发框架,它具有以下优势:

  • 简化配置,提供了很多默认配置和自动配置,可以减少开发者的工作量和出错率
  • 便捷管理,提供了很多启动器和依赖管理,可以轻松地添加和更新项目所需的组件
  • 嵌入式容器,支持 Tomcat、Jetty、Undertow 等内置的 Web 容器,可以方便地打包和部署应用
  • 监控指标,提供了 Actuator 模块,可以查看应用的运行状态、健康状况、日志文件等信息
  • 生态系统丰富,与 Spring Cloud、Spring Data、Spring Security 等框架集成良好,可以实现微服务、数据访问、安全控制等功能

waynboot-mall 项目使用 Spring Boot 3.0 版本作为基础框架,它在 2.x 版本的基础上,提供了很多新的特性和改进。

官网地址:https://spring.io/projects/spring-boot

权限控制-Spring Security

Spring Security 是一个基于 Spring 的安全框架,它具有以下优势:

  • 提供了丰富的安全功能,如认证、授权、会话管理、密码加密、CSRF 防护等
  • 支持多种安全机制,如表单登录、HTTP 基本认证、OAuth2、JWT 等
  • 与 Spring Boot 和 Spring Cloud 等框架集成良好,可以实现自动配置和微服务安全
  • 基于过滤器链和切面的设计,可以灵活地定制和扩展安全逻辑

waynboot-mall 集成 Spring Security 主要用于后台系统的权限管理需求,用于控制各个用户对菜单、按钮的操作权限。

官网地址:https://spring.io/projects/spring-security

ORM 框架-MyBatis-Plus

ORM 框架是一种将对象和关系数据库之间进行映射的技术,它可以让开发者使用面向对象的方式来操作数据库,而不需要直接编写 SQL 语句。ORM 框架的优点是可以提高开发效率,降低代码重复,增强可移植性和可维护性。ORM 框架的缺点是可能会影响性能,增加复杂度,失去对 SQL 语句的控制。

MyBatis-Plus 是一个在 MyBatis 基础上进行了增强的 ORM 框架,它具有以下优势:

  • 代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口、Service 接口等代码,提高开发效率
  • 通用 CRUD 操作,提供了 BaseMapper 和 BaseService 接口,可以实现基本的增删改查操作,无需编写 SQL 语句
  • 条件构造器,提供了 Wrapper 和 LambdaWrapper 类,可以方便地构建复杂的查询条件和更新条件
  • 分页插件,提供了 PaginationInterceptor 拦截器,可以实现物理分页和逻辑分页的功能
  • 乐观锁插件,提供了 OptimisticLockerInterceptor 拦截器,可以实现乐观锁的功能,避免数据更新的并发冲突

waynboot-mall 集成 MyBatis-Plus 主要还是为了减少开发工作量,减少使用传统 Mybatis 时 Dao 层代码的重复编写。

官网地址:https://baomidou.com

工具类库-hutool

Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。Hutool 中的工具方法来自于每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当。

Hutool 和 Apache Commons、Google Guava 的对比,可以从以下几个方面来看:

  • 文档:Hutool 有完善的中文文档,这个很关键,学习成本降低。而 Apache Commons 和 Google Guava 的文档都是英文的,对于国内开发者来说,可能不太友好 1。
  • 包大小:Hutool 的 jar 包更小,更优雅易懂的 api,而 Apache Commons 和 Google Guava 的 jar 包都比较大,有些功能可能用不到,但是也要引入 1。
  • 功能:Hutool 结合了 Apache Commons、Google Guava 的优点,也可以在源码中看到它们的身影。而且它不依赖第三方包。Hutool 提供了很多常用的工具类,如日期、字符串、数组、文件、加密、网络、反射、正则等等,还有一些特色的组件,如定时任务、脚本执行、图片验证码、Excel 和 Word 操作、JSON 实现等等 23。
  • 更新:Hutool 的更新速度比较快,作者很活跃,也很积极地接受用户的反馈和建议,不断完善和优化。而 Apache Commons 和 Google Guava 的更新速度相对较慢,有些功能可能已经过时或者不符合当前的需求 4。

人生苦短,我用 hutool,早用早下班。

官网地址:https://hutool.cn

网关-openresty

OpenResty 是一个基于 Nginx 和 Lua 的高性能 Web 平台,它可以让你用 Lua 脚本来扩展和定制 Nginx 的功能,开发出高效、灵活、可扩展的 Web 应用和服务。OpenResty 的优势有以下几点:

  • 性能高:OpenResty 利用 Nginx 的事件驱动模型和非阻塞 IO,以及 LuaJIT 的即时编译技术,可以实现高并发、低延迟、低内存占用的 Web 处理。
  • 开发快:OpenResty 提供了丰富的 Lua 库和第三方模块,可以方便地访问各种后端服务,如 MySQL、Redis、Memcached 等,以及实现各种 Web 功能,如路由、缓存、安全、模板等。Lua 语言本身也是一门简洁、灵活、易学的脚本语言,不需要编译,可以快速迭代开发和部署。
  • 编程范式优雅:OpenResty 把 Lua 的协程和 Nginx 的事件机制完美结合,实现了同步非阻塞的编程范式,可以用同步的代码逻辑来实现异步的网络 IO,避免了回调地狱和异步关键字的困扰,让代码更易读、易写、易维护。
  • 功能强大:OpenResty 可以访问 Nginx 的各个阶段和内部变量,可以实现复杂的访问控制、负载均衡、动态代理、动态网关等功能,甚至可以用 Lua 来编写 Nginx 的内容处理器,实现完整的 Web 应用。OpenResty 还支持热插拔、热升级、热修复等特性,提高了系统的可靠性和稳定性。

openresty 可以帮助 waynboot-mall 项目实现网关安全、流量限制等功能,这些功能在项目上线时面对大流量和恶意流量都是非常使用的。

官网地址:https://openresty.org/cn

数据库连接池-HikariCP

HikariCP 是一个 JDBC 连接池实现,它具有以下优势:

  • 性能高,相比其他连接池实现,它有更快的连接获取速度和更低的内存占用
  • 稳定性强,它可以自动检测和修复无效的连接,避免连接泄露和超时
  • 配置简单,它提供了很多有用的参数,如连接超时、空闲超时、最大生命周期等
  • 与 Spring Boot 集成方便,它是 Spring Boot 2.x 以后的默认连接池实现

HikariCP 很快也很强,数据库连接稳定性也不错,推荐大家使用。

官网地址:https://github.com/brettwooldridge/HikariCP

缓存-Redis

Redis 是一个高性能的内存数据库和缓存中间件,它具有以下优势:

  • 数据类型丰富,支持字符串、列表、集合、哈希表、有序集合等多种数据类型和数据结构,可以满足不同的缓存场景和需求
  • 功能强大,支持发布订阅、事务、管道、持久化等多种高级功能,可以实现消息队列、事件驱动、数据备份等功能
  • 性能高效,采用单线程模型和非阻塞 IO 模型,可以处理高并发请求,提高应用的响应速度和吞吐量
  • 可扩展性强,支持集群模式和哨兵模式,可以实现高可用性和负载均衡,支持水平扩展和数据分片

Redis 已经成了服务端项目的对于缓存需求的标配中间件了,大家没异议吧。

官网地址:https://redis.io

Redis 访问客户端-Lettuce

Lettuce 是一个 Redis 客户端库,它具有以下优势:

  • 支持异步和响应式编程模型,可以提高程序的并发性能和可读性
  • 支持集群模式和哨兵模式,可以实现 Redis 的高可用性和负载均衡
  • 支持编解码器和扩展命令,可以自定义数据的序列化和反序列化方式,以及增加新的 Redis 命令
  • 与 Spring Data Redis 集成良好,可以实现自动配置和注解驱动的缓存操作

Lettuce 是 Spring boot2.0 以后默认推荐的 Redis java 语言客户端,速度很快,但是连接稳定性没有 Jedis 好。这个大家有兴趣可以百度 “lettcue 连接中断”,网上有很多这种讨论,在 waynboot-mall 项目中还是继续使用 Lettuce。

官网地址:https://lettuce.io

消息队列-RabbitMQ

RabbitMQ 是一个基于 AMQP 协议的消息队列中间件,它具有以下优势:

  • 消息模式灵活,支持点对点、发布订阅、路由、主题等多种消息模式,可以满足不同的业务场景和需求
  • 交换机类型多样,支持直连交换机、扇形交换机、主题交换机等多种交换机类型,可以实现不同的消息分发和过滤策略
  • 异步通信解耦合,可以实现异步通信和解耦合的效果,提高系统的可扩展性和容错性
  • 延迟消息死信队列,可以实现延迟消息和死信队列等高级功能,可以处理一些特殊的业务逻辑和异常情况
  • 管理界面友好,提供了一个 Web 管理界面,可以方便地查看和管理队列、交换机、绑定、连接等信息

使用 RabbitMQ 来实现下单、发送邮件流程的解耦操作。

官网地址:https://www.rabbitmq.com

全文搜索-ElasticSearch

ElasticSearch 是一个基于 Lucene 的分布式搜索引擎,它具有以下优势:

  • 全文检索近实时搜索,支持全文检索和近实时搜索的功能
  • 查询语法过滤条件,支持多种查询语法和过滤条件,可以实现复杂的搜索需求
  • 分析聚合功能强大,支持分词器和同义词等分析工具,可以提高搜索的准确性和相关性
  • 高可扩展性高可用性,支持水平扩展集群节点,并保证数据的一致性

ElasticSearch 很强,不管是全文搜索还是大数据查询都好用。

官网地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high.html

分布式定时任务-xxl-job

xxl-job 是一个分布式任务调度平台,它具有以下优势:

  • 开发迅速,学习简单,轻量级,易扩展:xxl-job 提供了一个简洁和友好的 Web 界面,可以方便地创建和管理任务。它也提供了一个代码生成器,可以根据数据库表结构自动生成任务代码。它还支持多种任务类型,如 Bean 模式、GLUE 模式、脚本模式等,可以满足不同的业务场景和需求。它还支持多种调度策略,如单机串行、分片广播、故障转移等,可以实现高效和灵活的任务执行。
  • 支持多种执行器注册方式,如自动注册、手动注册等:xxl-job 支持执行器的自动注册和手动注册,可以适应不同的网络环境和部署方式。自动注册可以通过 IP 或域名来注册执行器,无需人工干预。手动注册可以通过指定执行器地址列表来注册执行器,可以实现更精细的控制。
  • 提供了丰富的管理功能,如任务监控、任务日志、任务报警等:xxl-job 提供了一个实时的任务监控界面,可以查看任务的运行状态、运行结果、运行时间等信息。它也提供了一个详细的任务日志界面,可以查看任务的执行过程、执行参数、执行异常等信息。它还提供了一个灵活的任务报警机制,可以通过邮件、短信、钉钉等方式通知任务的异常情况。

xxl-job 是国内 java 生态除了 quartz 外最经典的开源分布式定时任务平台,这句话谁赞成谁反对?

官网地址:https://www.xuxueli.com/xxl-job

服务监控-spring-boot-admin

spring-boot-admin 是一个用于管理和监控 Spring Boot 应用的工具,它具有以下优势:

  • 界面友好,功能强大,可以查看应用的运行状态、健康状况、日志文件等信息
  • 支持多种通知方式,如邮件、Slack、钉钉等,可以及时通知应用的异常情况
  • 支持 Spring Cloud,兼容多种注册方式,如 Eureka、Consul、Zookeeper、Nacos 等,可以自动发现和注册应用

Spring boot 应用的老牌应用程序监控工具了,推荐大家了解一下。

官网地址:https://docs.spring-boot-admin.com/current/getting-started.html

最后聊两句

waynboot-mall 项目使用的框架和中间件都是目前的主流选择,它们已经很成熟、易用、市面上资料文档齐全,面对不同业务需求使用这些技术就已经足以。

项目github地址:https://github.com/wayn111/waynboot-mall

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞