# guage-toolkits **Repository Path**: Mark-coding/guage-toolkits ## Basic Information - **Project Name**: guage-toolkits - **Description**: 大家好,我是杨得朝。这些都是本人在多年工作中练习实战的一些代码,个别技术点总结不是很全面,大家可以补充。由于工作繁忙,所以很多知识点不是很全面,希望大家谅解。guage-toolkits工程主要是本人平时学习实验的一些日常java代码, 包括注解的自定义使用,自定义注解实现动态数据源、Java代码生成,模拟spring框架开发的一款类似的mini-spring框架,定时任务,分库分表,Spring - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-08-23 - **Last Updated**: 2025-08-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 平台简介 `guage-toolkits` 工程是一个集多种 Java 技术实践与应用于一体的综合性项目,它凝聚了我在日常学习与实验过程中的智慧结晶。这个项目的意义不仅在于对各类 Java 技术的实践探索,更在于为 Java 开发者提供一个丰富且实用的参考范例。 在注解的运用方面,项目深入研究了自定义注解的使用方法,通过自定义注解实现了动态数据源的切换功能。这一特性在复杂的数据库操作场景中极为实用,能够根据不同的业务需求灵活切换数据源,大大提高了系统的可扩展性和灵活性。 Java 代码生成是该项目的另一个亮点。通过编写代码生成工具,能够根据预先定义的规则和模板,自动生成高质量的 Java 代码,显著提高了开发效率,减少了重复劳动。 模拟 Spring 框架开发的 `mini-spring` 框架,是对 Spring 核心原理的一次深入剖析和实践。这个轻量级的框架实现了 Spring 的部分核心功能,如依赖注入、IoC 容器等,让开发者能更深入地理解 Spring 框架的底层机制。 定时任务的实现为项目增添了自动化处理的能力。通过合理配置定时任务,可以在特定的时间点或时间段内自动执行预设的业务逻辑,如数据备份、报表生成等。 分库分表技术的应用则是为了解决大数据量下的数据库性能瓶颈问题。通过将数据分散存储在多个数据库和表中,有效提高了数据库的读写性能和可扩展性。 SpringMVC 的使用则为项目提供了强大的 Web 开发能力。借助 SpringMVC 的 MVC 架构模式,能够快速搭建起一个高效、稳定的 Web 应用程序。 `guage-toolkits` 工程是一个全面且深入的 Java 技术实践项目,它涵盖了多个重要的 Java 技术领域,对于 Java 开发者来说,具有很高的学习和参考价值。 # guage-distributed-transaction ## 通过简单的demo模拟分布式事务中2PC,3PC,TCC分布式事务的具体流程和原理 ### New Features 1. guage-transaction-2pc-demo中模拟了2PC完整的执行流程和原理 2. guage-transaction-3pc-demo中模拟了3PC完整的执行流程和原理 3. guage-transaction-tcc-demo中模拟了TCC完整的执行流程和原理 4. guage-transaction-tcc-db-demo中模拟了TCC完整的操作数据库的过程,并且完整的实现了高并发场景下数据不一致的问题。 ``` 1. 幂等性保障 通过事务日志表 (tcc_transaction) 记录全局事务状态,每个事务ID唯一 所有操作前先检查事务状态,避免重复执行 2. 并发控制 乐观锁:账户表使用 version 字段,更新时校验版本号 悲观锁:Try 阶段使用 SELECT ... FOR UPDATE 锁定账户 3. 异常处理 Try 阶段失败立即触发 Cancel Confirm/Cancel 失败时记录日志,依赖异步任务补偿 ``` 5. guage-transaction-2pc-jdbc-demo实现了2PC利用jdbc操作数据库,张三给李四转账的完整过程。 ``` 关键说明 XA数据源配置:使用MySQL的MysqlXADataSource创建两个XA数据源,分别连接到2pc-db1和2pc-db2数据库。 全局事务ID:通过UUID生成全局唯一的事务ID,确保跨系统的事务标识一致。 分支事务管理: start:开始一个分支事务,执行SQL操作。 end:标记分支事务结束,准备进入提交阶段。 两阶段提交: Prepare阶段:各参与者准备提交,返回准备结果。 Commit/Rollback阶段:根据Prepare结果决定提交或回滚事务。 ``` 6. guage-transaction-3pc-jdbc-demo实现了3PC利用jdbc操作数据库,张三给李四转账的完整过程。 ``` 参与者接口(Participant):定义了参与者在 3PC 协议中的基本操作,包括询问是否可以提交(canCommit)、 预提交(preCommit)、正式提交(doCommit)和中止操作(doAbort)。 协调者类(Coordinator):负责协调各个参与者的操作,按照 3PC 协议的三个阶段进行控制。在询问阶段询问所有参与者是否可以提交, 若都可以则进入预提交阶段,最后进入提交阶段;若有参与者不能提交,则通知所有参与者中止操作。 银行参与者类(BankParticipant):实现了 Participant 接口,具体处理数据库操作。在 canCommit 方法中检查转出账户余额是否足够; preCommit 方法中进行转账的预操作;doCommit 方法提交事务;doAbort 方法回滚事务。 主类(ThreePhaseCommitTransfer):创建两个数据库的参与者对象,以及协调者对象,调用协调者的 transfer 方法完成转账操作, 并根据结果输出相应信息。 ``` 6. guage-transaction-tcc-jdbc-demo实现了TCC利用jdbc操作数据库,购买商品过程中创建订单和扣减库存的完整过程。 ``` TCC执行流程说明 阶段 订单服务操作 库存服务操作 try 1. 创建状态为TRY的订单 1. 冻结库存数量 2. 记录TCC日志 2. 记录TCC日志 Confirm 1. 更新订单状态为CONFIRMED 1. 扣减真实库存 2. 更新日志 2. 更新日志 Cancel 1. 删除预订单 1. 释放冻结库存 2. 更新日志 2. 更新日志 ``` # guage-mini-spring ## mini-spring是精简版的Spring框架,通过简短和少量的代码基于Cglib实现Bean的依赖注入 1. 定义并实现一个简单的Bean容器 ``` 在开发之初,我们需要定义并构建一个简单的 Bean 容器。这个容器是整个系统的核心存储结构,用于存放应用程序中所有的 Bean 对象。 可以将其设计为一个键值对的映射结构,其中键是 Bean 的名称,值是对应的 Bean 实例。通过这样的设计,能够方便地对 Bean 进行 管理和操作。 ``` 2. 运用设计模式,实现 Bean 的定义、注册、获取 ``` 为了使 Bean 的管理更加灵活和可扩展,我们运用设计模式来实现 Bean 的定义、注册和获取功能。可以采用单例模式确保每个 Bean 在容器中只有一个实例,使用工厂模式来创建 Bean 实例。定义一个 Bean 定义类,用于描述 Bean 的基本信息,如类名、构造函数参数等。 然后通过注册方法将 Bean 定义添加到容器中,最后通过获取方法从容器中获取 Bean 实例。 ``` 3. 基于Cglib实现含构造函数的类实例化策略 ``` 对于含有构造函数的类,我们基于 Cglib 来实现实例化策略。Cglib 是一个强大的代码生成库,它可以在运行时动态生成类的子类,从而实现对类的代理和增强。 通过 Cglib,我们可以在实例化对象时,根据构造函数的参数进行正确的初始化 ``` 4. 为Bean对象注入属性和依赖Bean的功能实现 ``` 为了实现 Bean 对象之间的依赖关系,我们需要为 Bean 对象注入属性和依赖 Bean。可以定义一个属性注入器,通过反射机制将属性值和依赖 Bean 注入到目标 Bean 中。在 Bean 定义中添加属性和依赖 Bean 的描述信息,在实例化 Bean 时,根据这些信息进行属性注入。 ``` 5. 设计与实现资源加载器,从Spring.xml解析和注册Bean对象 ``` 为了从 Spring.xml 配置文件中解析和注册 Bean 对象,我们需要设计并实现一个资源加载器。该加载器负责读取 XML 文件,解析其中的 Bean 定义信息, 并将其转换为 Bean 定义对象,然后注册到 Bean 容器中。可以使用java中的dom解析库来解析 XML 文件。 ``` 6. 实现应用上下文,自动识别、资源加载、扩展机制 ``` 我们要实现一个应用上下文,它是整个系统的入口点,负责自动识别资源、加载 Bean 定义和实例化 Bean 对象。应用上下文可以封装资源加载器、 Bean 工厂等组件,提供统一的接口供外部使用。同时,还可以设计扩展机制,允许用户在应用启动时进行自定义的初始化操作。 ``` # guage-data-structure ## 数据结构中常用数据结构实现和模拟 1. SequenceList实现的一个顺序表类,它能实现增删改查操作,并且可以适配各种数据类型。 2. LinkedListImplementation实现一个链表。 3. CustomHashMap实现类似一个HashMap的数据结构。 # guage-dynamic-datasource ## 利用自定义注解@ChoiceDataSource实现通过注解的方式制定对应的数据源, 只要在Service层的类上添加@ChoiceDataSource(value = Datasources.DB1)类似的注解,就可以操作对应的数据源 使用方式如下: ``` @Service @ChoiceDataSource(value = Datasources.DB1) public class UserServiceImpl implements IUserService { @Autowired private UserMapper userMapper; @Override public User selectUserById(Integer id) { return userMapper.selectUserById(id); } } ``` ### New Features 1. 自定义了@ChoiceDataSource注解,可以让开发人员在多数据源环境中通过注解的方式直接操作对应的数据库。 # guage-docker-eureka ## 利用Dockerfile將eureka服務打包為docker容器鏡像 ### New Features 1. 将项目打包后生成jar包guage-docker-eureka.jar 2. 在该目录放置Dockerfile文件然后在该目录执行命令:docker build -t guage-docker-eureka . 3. 在docker环境执行docker images可以查询已经生成的镜像,其中名称为guage-docker-eureka 4. 执行容器启动命令:docker run -d -p 8761:8761 guage-docker-eureka 5. 在浏览器访问http://localhost:8761/验证是否启动成功 # guage-annotation-injection ## 模拟Spring框架中的@Autowired,@Service,@Transaction ### New Features 1. 自定义注解@GuageAutowired模拟官方spring框架中的@Autowired 2. @GuageService模拟官方spring框架中的@Service 3. @GuageTransaction模拟官方spring框架中的@Transaction # guage-data-check ## 验证两个数据库中表及其表结构的差异 ### New Features 1. 验证mysql数据库中两个数据库中数据之间的差异。 # guage-sharejdbc ## sharejdbc实现分库分表的功能 ### New Features 1. 利用sharding-jdbc-spring-boot-starter实现了数据存取的分库分表功能 # guage-postman-test ## 完整的列举了SpringMVC中请求传递参数的各种方式,可以利用postman请求 ### New Features 1. 通过 @RequestParam 注解接收参数 2. 通过 @PathVariable 注解接收路径参数 3. 通过 @RequestBody 注解接收 JSON 数据 4. 通过 HttpServletRequest 对象接收参数 5. 通过实体类接收表单参数 ## 内置功能 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3. 岗位管理:配置系统用户所属担任职务。 4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7. 参数管理:对系统动态配置常用参数。 8. 通知公告:系统通知公告信息发布维护。 9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10. 登录日志:系统登录日志记录查询包含登录异常。 11. 在线用户:当前系统中活跃用户状态监控。 12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14. 系统接口:根据业务代码自动生成相关的api接口文档。 15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16. 缓存监控:对系统的缓存查询,删除、清空等操作。 17. 在线构建器:拖动表单元素生成相应的HTML代码。 18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。