# basis-enhance **Repository Path**: zephyr_520/basis-enhance ## Basic Information - **Project Name**: basis-enhance - **Description**: 基础框架设施增强 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 64 - **Created**: 2025-01-18 - **Last Updated**: 2025-01-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **csdn博客:**[https://blog.csdn.net/Hellowenpan?spm=1000.2115.3001.5343](https://blog.csdn.net/Hellowenpan?spm=1000.2115.3001.5343) **个人博客**:[http://www.bad-guy.cn](http://www.bad-guy.cn) ![MIT协议](https://img.shields.io/badge/license-MIT-red) ![version](https://img.shields.io/badge/version-0.0.1-red) star fork [![文攀/basis-enhance](https://gitee.com/mr_wenpan/basis-enhance/widgets/widget_card.svg?colors=393222,ebdfc1,fffae5,d8ca9f,393222,a28b40)](https://gitee.com/mr_wenpan/basis-enhance) ### 项目功能说明 该工程(`basis-enhance`)主要是对一些常用的组件的一个增强,以及对开发中常用的通用业务功能组件(比如:幂等、应用启动异步初始化、Redis多数据源、Redis动态切换db、MongoDB多数据源、groovy动态编译类等)进行实现,实现可插拔,做到安全、稳定、开箱即用! ### 基于netty实现简单RPC *** - [基于netty + springboot + nacos实现简单rpc](https://gitee.com/mr_wenpan/basis-simple-rpc) *** ### 已增强的功能组件 *** #### 1、spring-boot-starter-data-redis模块增强 - 动态切换redis db - 非集群模式下支持Redis动态切换db,使用者按照自己的意愿选择要操作的db - 基于redisson实现的延时队列 - 提供延时队列实现,使用方方便的实现延时消息接收和发送,可用于订单超时取消、延时邮件发送等场景 - redis队列消费监控 - 提供redis的list队列消费监控,当队列中有数据时进行拉取消费 - redis多数据源 - 支持多个redis数据源切换,使用者可以按自己意愿使用多个redis数据源 - 常用redis使用帮助器 - 将Redis常用的使用操作进行封装,使得更加易用 **详细使用介绍链接**:[spring-boot-data-redis功能增强插件使用及相关原理](./enhance-boot-data-redis/README.md) *** #### 2、基于groovy的轻量级规则引擎 - 基于springboot来整合的groovy轻量级脚本引擎,使用方便,即插即用 - 提供不同的脚本来源加载器,可从不同数据源加载脚本 - 支持不重启动态更新脚本,从而达到在不重启服务的情况下动态改变代码运行规则 - 使用缓存技术,缓存脚本Class到本地内存,并定时保证和数据源的脚本保持一致性同步,并指定最大缓存条数以及数据淘汰规则保证不发生oom的情况下还可以及时淘汰不用的脚本,释放更多的内存 - 提供丰富的扩展和Helper,可动态更新、增加、删除脚本,以及默认的`DefaultEngineExecutor`可以方便的执行脚本 - 项目中提供了非常多的【可配置项】以及【可替换组件】,使用方可以根据项目需要调整配置项参数值,也可以自己实现某一个组件,然后注册到容器中,进而替换原有组件 **详细使用介绍链接**:[基于groovy的轻量级规则引擎介绍](./enhance-boot-groovy-engine/README.md) *** #### 3、异常增强 - 主要是利用`spring`的@`ControllerAdvice`对常见异常进行捕获,然后结合多语言和 `异常描述 + 参数格式化`以友好的方式返回给前端 **详细使用介绍链接**:[enhance-boot-exception 以友好的方式返回异常信息给前台](./enhance-boot-exception/README.md) *** #### 4、MongoDB多数据源增强 - 支持一个springboot应用程序中配置多个MongoDB数据源 - 使用注解`@EnableMongoMultiSource`开启MongoDB多数据源功能启用与禁用,实现了动态可插拔功能。 - 提供`MongoMultiSourceClient`来获取并操作某个指定的数据源 - 对应每个MongoDB集合都支持自定义分片算法 - 提供默认的一致性hash算法实现,解决使用一致性hash分片算法时可能存在的多数据源数据倾斜问题 - 提供默认的一致性hash分片算法实现,对于MongoDB集合可以采用一致性hash算法来动态选取存放数据的数据源。 **详细使用介绍链接**:[增强MongoDB多数据源实现](./enhance-boot-mongo/README.md) *** #### 5、通用幂等组件 - 提供一套**较为通用**的业务幂等解决方案 - 使用依赖倒置,将幂等逻辑核心实现和幂等数据持久化进行分离,可方便的基于核心幂等模块(`enhance-boot-idempotent`)进行自定义扩展(可基于`IdempotentEntity`自由的实现扩展) - 提供了灵活的API模式供使用者灵活使用幂等功能,也提供了基于【`注解 + spel`】的幂等功能,使用者可快速简单的使用注解实现业务幂等 - 目前提供基于MySQL和Redis的两种存储介质实现幂等功能,使用者可以方便的动态选择(当然也可以自定义实现,仅需实现一个接口即可实现自定义) - 提供可扩展幂等异常处理接口(`IdempotentExceptionEventHandler`)以供使用方对**极端情况下**存在的幂等异常进行**自定义兜底** - 无锁实现并且不依赖于事务,可方便灵活进行拓展,幂等数据存储介质不会强依赖某个介质 - 提供在一个应用中使用多种模式的幂等实现(比如:customer应用里既要使用基于MySQL的幂等实现,又要使用基于Redis的幂等实现,并且可以通过传入某个name进行动态选择需要使用的实现),该功能待后续实现 **详细使用介绍链接**:[基于幂等表思想的幂等组件实现](./enhance-boot-idempotent/README.md) *** #### 6、数据库多数据源 - 基于spring提供的`org.springframework.jdbc.datasource.AbstractDataSource`进行自定义开发的动态多数据源组件 - 支持动态插拔,仅需要在配置类上使用注解`@EnableDynamicDataSource`便可以开启动态数据源 - 支持以灵活的API方式或以方便的注解方式来动态切换数据源 - 目前只支持`hikari`数据源,其余数据源适配待后续接入(比如:阿里巴巴的druid) - 数据库多数据源组件在苞米豆已有较为完善的实现,可参考使用 *** #### 7、基于Redis实现的分布式限流组件 - 基于【`springboot + Redis + lua`】 实现了简单易用的分布式限流组件 - 提供了基于注解的限流方式和`redisLimitHelper` - 提供了`滑动时间窗口限流算法`和`令牌桶限流算法`的实现 - 基于注解动态可插拔该限流组件 **详细使用介绍链接**:[基于Redis+lua实现分布式限流组件](./enhance-boot-limiting/README.md) *** #### 8、应用启动加速异步初始化组件 在实际使用 Spring/Spring Boot 开发中,一些 Bean 在初始化过程中,会执行一些准备操作,如: - 拉取远程配置 - 初始化数据源 - 加载数据到缓存 在应用启动期间,这些 Bean 会增加 Spring 上下文刷新时间,导致应用启动耗时变长。为了加速应用启动,`enhance-boot-async-init`模块提供了通过配置的可选项,将 Bean 的初始化方法(`init-method`)使用单独线程异步执行的能力,加快 Spring 上下文加载过程,提高应用启动速度。仅需要将 `@BasisAsyncInit`注解标注到需要异步执行的初始化方法上即可实现应用启动过程中异步初始化。 **详细使用介绍链接**:[加速应用启动异步初始化组件](./enhance-boot-async-init/README.md) #### 9、并发功能增强 - 提供线程优先的线程池实现 - 提供了异步任务执行器,方便的执行异步任务,以及实现对异步任务线程池可监控和管理 #### 10、基于Redis的轻量级延时队列 - TODO 待整合实现