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

news/2024/7/10 20:08:11 标签: 开源, java, spring

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

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

技术选型一览

系统组件采用技术官网
1基础框架Spring Boot3.0https://spring.io/projects/spring-boot
2访问控制Spring Securityhttps://spring.io/projects/spring-security
3ORM 框架MyBatis-Plus3.5https://baomidou.com
4工具类库hutoolhttps://hutool.cn
5流量网关、网关安全openrestyhttps://openresty.org/cn
6日志记录Nginxhttps://logback.qos.ch
7数据库连接池HikariCPhttps://github.com/brettwooldridge/HikariCP
8Redis 客户端Lettucehttps://lettuce.io
9全文搜索ElasticSearchhttps://www.elastic.co
10消息队列RabbitMQhttps://www.rabbitmq.com
11定时任务xxl-jobhttps://www.xuxueli.com/xxl-job
12服务监控spring-boot-adminhttps://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 项目使用的框架和中间件都是目前的主流选择,它们已经很成熟、易用、市面上资料文档齐全,面对不同业务需求使用这些技术就已经足以。

想要获取 waynboot-mall 项目地址以及配套资料的朋友可以在我的公众号【程序员wayn】回复 "wayn商城教学",即可获取。


http://www.niftyadmin.cn/n/5362601.html

相关文章

H5黑客特效主页引导页源码

H5黑客特效主页引导页源码 源码介绍:一款带黑客帝国背景特效的引导页源码 下载地址: https://www.changyouzuhao.cn/11677.html

发布2-JRT数据库环境准备

JRT目前支持的库有IRIS、Cache、PostGreSql、人大金仓,本章节将介绍准备JRT需要的数据库环境的IRIS和PostGreSql部分。 PostGreSql库的下载地址 下载链接 Windows或者Linux版本 Windows版本安装 Windows版本按提示安装即可 Linux版本安装 我没翻到Linux包下载链…

微调实操一: 增量预训练(Pretraining)

1、前言 《微调入门篇:大模型微调的理论学习》我们对大模型微调理论有了基本了解,这篇结合我们现实中常见的场景,进行大模型微调实操部分的了解和学习,之前我有写过类似的文章《实践篇:大模型微调增量预训练实践(二)》利用的MedicalGPT的源码在colab进行操作, 由于MedicalGPT代…

Oracle篇—普通表迁移到分区表(第五篇,总共五篇)

☘️博主介绍☘️: ✨又是一天没白过,我是奈斯,DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣…

使用 MongoDB 的 estimatedDocumentCount 快速估计文档数量

在处理大型数据集时,MongoDB 提供了多种方法来统计集合中的文档数量。其中,estimatedDocumentCount() 方法因其快速和高效,特别适合于那些不需要精确计数的场景。本文将介绍如何在 Java 应用程序中使用 estimatedDocumentCount() 方法&#x…

Science最新研究成果:速度和准确性均超越人类化学家,且具独创性,AI自主化学合成机器人加速化学发现

最近,在光化学和光催化方面的研究出现了惊人的爆发,部分原因在于光作为反应源对环境无害。然而,许多研究展示的是小规模反应,而扩大规模依赖于不同技术的拼凑,可能需要大量的试验和错误来优化。 针对复杂光催化反应条…

户用光伏发电项目有哪些优点?到底要不要安装家庭光伏?

户用光伏就是指将光伏电池板置于家庭住宅顶层或者院落内,用小功率或者微逆变器进行换流过程,并直接利用该新能源,亦可将多余的电能并入电网。户用光伏发电项目有哪些优势呢? 1.夏天隔热效果好 光伏电站都是建立在屋顶上的。相当…

HTML+CSS:导航栏组件

效果演示 实现了一个导航栏的动画效果&#xff0c;当用户点击导航栏中的某个选项时&#xff0c;对应的选项卡会向左平移&#xff0c;同时一个小圆圈会出现在选项卡的中心&#xff0c;表示当前选项卡的位置。这个效果可以让用户更加清晰地了解当前页面的位置和内容。 Code <…