
项目实战技巧
文章平均质量分 85
开发中的一些使用技巧
sjsjsbbsbsn
这个作者很懒,什么都没留下…
展开
-
单点登录(Single Sign-On,SSO)详解
概念含义认证中心唯一负责用户登录鉴权的系统子系统业务系统,接入 SSO 客户端后支持自动登录Cookie用于保存认证中心或子系统本地登录态Ticket一次性登录票据,认证中心颁发,用于安全传递登录状态loginId用户唯一身份标识(一般是用户ID)原创 2025-04-21 16:42:43 · 347 阅读 · 0 评论 -
SpringAI入门:对话机器人
Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Spring Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动。原创 2025-04-18 14:13:50 · 796 阅读 · 0 评论 -
若依(RuoYi)OSS上传学习记录总结
在学习若依(RuoYi)框架的OSS(对象存储服务)上传功能过程中,我深入研究了其整合AWS S3协议OSS功能的实现方式、相关配置以及数据库设计等内容,收获颇丰。以下是详细的学习记录总结。原创 2025-03-22 15:07:25 · 802 阅读 · 0 评论 -
MQ 消息发送可靠性保证 —— 整合 Spring Retry 重试框架 + 补偿发送方案
RocketMQ Starter 本身提供重试机制较为简单,无法指定较复杂的重试策略Spring Retry 是一个用于为应用程序提供自动重试功能的框架,特别适用于执行可能会因暂时性问题失败的操作(如网络请求、数据库操作、消息队列操作等)。通过配置,Spring Retry 能够在失败时自动重试指定次数,且每次重试可以配置不同的延迟和间隔。原创 2025-03-08 13:02:42 · 957 阅读 · 0 评论 -
点赞,点赞列表方案设计
点赞系统是社交平台或内容平台中常见的功能,用户通过点赞来表达对内容的喜好。为了高效地处理大量用户的点赞请求并快速展示点赞列表,需要设计一个高效的点赞存储与查询系统。原创 2025-02-28 20:58:48 · 497 阅读 · 0 评论 -
提升 Spring Boot 系统性能:高效处理实时数据流的 BufferTrigger 使用详解
快手开源的 BufferTrigger 是一个用于数据处理,它主要用于实时数据流处理场景。BufferTrigger 的主要作用是为了解决在大数据流处理中常见的问题:如何高效地对连续的数据流进行缓冲,并在满足一定条件时触发下游计算或存储操作。提高效率:通过批量处理数据而不是逐条处理,可以显著减少 I/O 操作的次数,从而提升整体处理效率。资源优化:对于一些需要消耗较多计算资源的操作(如写入数据库、调用外部服务等),通过累积一批数据后再执行一次这样的操作,可以更有效地利用系统资源。简化逻辑。原创 2025-02-27 14:32:32 · 813 阅读 · 0 评论 -
Feign 请求拦截器:实现 userId 服务间透传
在微服务架构中,通常负责鉴权并从请求头中提取用户身份(如userId),将其传递给下游服务。但服务间的调用(如通过 OpenFeign)userIduserId通过,在服务间调用时主动将当前服务的用户身份添加到请求头中,实现userId的透传。原创 2025-02-20 11:18:10 · 549 阅读 · 0 评论 -
解决异步线程无法从ThreaLocal获取上下文
如果说,我们写业务代码的时候,有些逻辑是需要在异步线程中去执行,如下图所示,异步线程中,再通过去获取上下文数据,就失效了。原创 2025-02-19 14:51:31 · 417 阅读 · 0 评论 -
网关整合 SaToken 实现接口鉴权
在微服务架构中,接口鉴权是确保系统安全的关键环节。通过整合 SaToken 与网关,可以有效地实现全局接口鉴权,确保每个请求都经过合法的身份验证。本文介绍了如何在 Spring Cloud Gateway 中集成 SaToken,实现基于 Token 的认证与授权机制。我们通过自定义网关过滤器,提取请求中的 Token 并进行验证,若 Token 合法则允许请求继续传递,否则拒绝请求。此外,利用 SaToken 的 @SaCheckLogin 注解,可以方便地在微服务中进行权限控制。原创 2025-02-19 09:49:51 · 469 阅读 · 0 评论 -
整合SaToken 实现登录功能
在现代的 Web 开发中,用户认证和登录管理是构建安全应用的关键环节。本文将介绍如何通过 Sa-Token 来实现一个简单、易扩展的登录系统。Sa-Token 是一个高效、轻量的 Java 权限认证框架,能够帮助开发者快速实现用户认证、权限控制和会话管理。原创 2025-02-18 18:26:28 · 882 阅读 · 0 评论 -
MybatisMybatisPllus公共字段填充与配置逻辑删除
在开发过程中,很多时候需要处理一些公共字段,例如:创建时间、修改时间、状态字段等。这些字段通常会在插入或更新数据时进行填充,以便记录数据的变化和状态。同时,逻辑删除也是常见的业务需求,比如删除记录并不是从数据库中物理删除,而是通过更新某个字段(如is_deleted)来标记数据已被删除。MyBatis 和 MyBatis-Plus 都提供了相应的机制来处理这些公共字段的填充和逻辑删除。下面我们将分别介绍如何在 MyBatis 和 MyBatis-Plus 中实现公共字段填充与逻辑删除。原创 2025-02-16 11:02:37 · 614 阅读 · 0 评论 -
使用MyBatisMyBatis Plus实现SQL日志打印与执行监控
在开发过程中,SQL日志的完整输出对于调试和性能优化至关重要。MyBatis默认的日志输出仅显示带占位符的SQL语句,无法直接看到实际参数值,且缺乏执行时间统计。本文将介绍两种实现方案:1. 原生配置方案:通过日志框架直接输出基础SQL日志2. 增强方案:使用MyBatis拦截器实现完整SQL打印和执行监控原创 2025-02-11 15:56:58 · 1254 阅读 · 0 评论 -
Java Web 开发中的分页与参数校验
在 Java Web 开发中,分页和参数校验是两个非常重要的功能。本文将围绕 **分页设计** 和 **参数校验** 进行探讨,包括如何设计合理的分页查询参数,以及如何利用 **Java 注解** 实现参数校验。原创 2025-02-07 14:58:09 · 1116 阅读 · 0 评论 -
场景设计学习-积分系统
积分系统是一种广泛应用于电商、社交平台、会员管理等场景的功能,用于激励用户参与和提升用户忠诚度。设计一个高效且灵活的积分系统需要考虑多个方面,包括积分的获取、消耗、兑换以及过期等机制。在积分获取方面,用户通过完成特定任务(如购买商品、签到、参与活动等)获得积分,积分可以与用户行为和活动紧密挂钩。系统需要确保积分获取的规则公平透明,同时支持定期或动态调整规则以增加灵活性。积分的消耗通常用于兑换商品、优惠券、服务等。为了增强用户体验,消耗规则应该简单易懂,并支持积分的部分兑换,以提高用户参与度。此外,系原创 2025-01-26 10:45:10 · 1217 阅读 · 0 评论 -
学习记录-统计记录场景下的Redis写请求合并优化实践
学习记录场景下的Redis写请求合并优化实践在高频学习进度统计场景中,前端每15秒上报播放进度,直接写入数据库面临性能挑战。频繁的插入与更新操作涉及多表联动(如学习记录表、课程章节表等),导致数据库负载激增,并发场景下易出现响应延迟甚至服务雪崩。优化方案采用Redis作为写缓冲层实现请求合并:写缓存:将进度更新暂存至Redis哈希结构,以lessonId+sectionId为键,聚合短时间内的多次更新,仅保留最新进度;延迟落库:通过延迟队列(如JDK DelayQueue)触发合并任务,20原创 2025-01-21 15:30:45 · 1185 阅读 · 0 评论 -
基于注解实现去重表消息防止重复消费
幂等性是指对同一操作的多次执行所产生的影响与一次执行的影响相同。消息消费场景:无论消息被消费多少次,最终结果应与消费一次一致。实现目标:通过幂等设计,确保业务逻辑的重复执行不会产生副作用。提供了一种通用的幂等注解,并通过 SpEL 的形式生成去重表全局唯一 Key/*** 设置防重令牌 Key 前缀*//*** 通过 SpEL 表达式生成的唯一 Key*//*** 设置防重令牌 Key 过期时间,单位秒,默认 1 小时*/幂等需要设置两个状态,消费中和已消费,创建对应的枚举。原创 2025-01-21 10:32:52 · 1454 阅读 · 0 评论 -
基于模板方法模式-消息队列发送
模板方法模式(Template Method Pattern)是一种行为型设计模式,旨在通过在父类中定义一个算法的框架(即模板方法),而将某些步骤延迟到子类中实现。模板方法模式让子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。父类提供了一个骨架方法(即模板方法),并规定了算法的步骤。子类负责实现某些具体的步骤,这些步骤通常是一些可变的行为,父类并不关心。父类的模板方法调用这些可变的步骤,完成一个完整的算法流程。原创 2025-01-21 09:20:16 · 1086 阅读 · 0 评论 -
缓存穿透解决方案
缓存空对象是解决缓存穿透的一种简单方法,适用于一些数据访问频繁且数据为空的场景,但它可能浪费缓存空间。布隆过滤器是一种高效的概率数据结构,能够快速判断数据是否存在,避免了不必要的数据库查询,但可能会误判数据的存在。布隆过滤器+缓存空对象是结合两种技术的解决方案,能够有效减少数据库的压力,并避免缓存穿透的发生。它在减少误判率的同时,也提高了系统的吞吐量。在实际使用时,通常需要根据具体场景和业务需求来选择合适的解决方案。原创 2025-01-19 10:09:17 · 688 阅读 · 0 评论 -
查询缓存击穿解决方案
缓存击穿是指缓存中的某个数据在缓存过期或者被删除后,下一次请求在没有命中缓存的情况下,直接访问数据库,导致缓存失效或被清除的瞬间,数据库承受大量的并发请求。简单来说,缓存击穿是缓存不可用情况下,缓存请求集中访问数据库的现象。原创 2025-01-19 09:53:12 · 970 阅读 · 0 评论 -
Java Faker
是一个用来生成虚拟数据的 Java 库,广泛用于测试、开发和填充数据库等场景。它通过模拟真实世界的名称、地址、电话号码等数据来生成假数据,帮助开发者在进行单元测试、性能测试或者演示时使用一些随机的、但符合一定格式的数据。原创 2025-01-15 10:14:18 · 485 阅读 · 0 评论 -
学习记录-基于分布式锁注解防重复提交
在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。自定义幂等注解用于标记需要实现幂等性的接口方法。结合分布式锁机制,确保即使在分布式环境中,接口的某次调用只会被成功执行一次,从而避免重复提交、重复消费等问题。/**原创 2025-01-14 09:58:46 · 1349 阅读 · 0 评论 -
使用Redis处理MQ消费幂等
在本方案中,通过使用 Redis 实现 MQ 消息的幂等处理,确保了消息在消费过程中只会被处理一次,避免了重复消费带来的业务异常和资源浪费。幂等性保证:使用 Redis 的来判断消息是否已被处理,确保消息在消费过程中仅被执行一次,避免重复消费的风险。通用性设计生产者代码采用通用模板,通过UUID生成消息的唯一标识messageId,并将其嵌入到消息体中,保证每条消息的唯一性。消费者代码采用幂等处理器模板,支持多种状态检查和异常处理。细化的异常处理。原创 2024-11-04 11:06:25 · 1268 阅读 · 1 评论 -
学习记录-操作日志
系统操作日志是用于记录系统中用户或系统本身所执行的各类操作的日志信息。这些日志通常包括操作的时间、操作的用户、具体操作内容、操作结果以及其他相关信息。**安全审计**:记录用户操作以防止恶意行为,确保系统的安全性。**问题排查**:在系统出现问题时,可以通过操作日志快速定位问题来源。原创 2025-01-13 10:48:56 · 1003 阅读 · 0 评论 -
项目异常的定义与处理
自定义异常在项目中非常重要,主要作用是帮助更明确地处理业务逻辑错误、增强代码的可读性和可维护性。以下几点解释了我们为什么需要自定义异常:1. **精确传达业务错误信息**:系统中可能会发生很多不同类型的异常,标准的`Exception`或`RuntimeException`等系统异常无法明确传达业务层面的错误含义。通过自定义异常`BusinessException`,我们可以为不同的业务逻辑定义具体的异常类型,便于开发者和维护者快速了解问题所在。2. **标准化错误信息**:通过`ErrorEnum`原创 2024-11-12 11:20:44 · 570 阅读 · 0 评论 -
Springboot线程池异常处理
在 Java 多线程编程中,)是一个常用的工具,用于管理线程的生命周期并提升应用程序的性能。然而,在使用线程池时,异常处理可能会被忽略,从而导致潜在的程序问题甚至崩溃。如果任务出现了异常,会发生什么呢?该怎么处理呢?怎么获取到异常信息来解决异常?想要知道如何解决,就需要了解了解线程池提交任务的两个方法execute与submit。原创 2024-11-18 10:46:37 · 1209 阅读 · 0 评论 -
SpringBoot集成Redis消息队列
本文介绍了如何在 Spring Boot 中集成 Redis Stream 消息队列的配置与消费逻辑,主要包括:- **消息消费配置**:通过 `StreamMessageListenerContainer` 实现消息的异步消费。配置了批量拉取的数量、阻塞超时、线程池等自定义参数,帮助提升系统的并发处理能力。- **多消费者并行处理**:通过消费者组(Consumer Group)机制,实现多消费者并行消费同一个 Stream,提高消息处理的吞吐量和效率。- **幂等性与消费确认**:通过 `Mes原创 2024-11-09 15:49:17 · 2086 阅读 · 0 评论 -
幂等处理方案学习
什么是幂等简单来说,**对于同一个系统,在同样条件下,一次请求和重复多次请求对资源的影响是一致的,就称该操作为幂等的**。比如说如果有一个接口是幂等的,当传入相同条件时,其效果必须是相同的。一般我们在系统中,幂等可能存在两种类型的问题:- 接口幂等:常说的接口防重复提交。- 消息队列幂等:如何保障消息队列客户端对相同的消息仅消费一次。原创 2024-11-06 10:01:18 · 1028 阅读 · 0 评论 -
学习记录-责任链模式验证参数
责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许将请求沿着一个处理链传递,直到链中的某个对象处理它。这样,发送者无需知道哪个对象将处理请求,所有的处理对象都可以尝试处理请求或将请求传递给链上的下一个对象。原创 2025-01-13 10:20:05 · 772 阅读 · 0 评论 -
SpringBoot集成Caffeine缓存:高性能本地缓存解决方案
Caffeine是一个高性能的Java缓存库,为Java应用程序提供了极快的本地内存缓存解决方案。它是基于Google Guava Cache重新设计的缓存框架,在性能和功能上都有显著提升。Caffeine的核心优势在于其高效的缓存算法和优秀的并发性能,能够显著提升应用程序的响应速度和吞吐量。原创 2024-12-13 16:05:54 · 782 阅读 · 0 评论 -
学习记录之游标翻页实现
我们在传递值的时候,不再取传递`pageNo`字段,而是传递`cursor`游标字段.`cursor`是上一次查询结果的位置,作为下一次查询的游标,由后端返回.但是游标翻页不适合跳页,只能不断的往下翻原创 2024-11-07 16:34:43 · 1145 阅读 · 0 评论 -
Spring Boot + MySQL 多线程查询与联表查询性能对比分析
在现代 Web 应用开发中,数据库性能是影响系统响应时间和用户体验的关键因素之一。随着业务需求的不断增长,单表查询和联表查询的效率问题日益凸显。特别是在 Spring Boot 项目中,结合 MySQL 数据库进行复杂查询时,如何优化查询性能已成为开发者必须面对的重要问题。在本实验中,我们使用了 Spring Boot 框架结合 MySQL 数据库,进行了两种常见查询方式的性能对比:多线程查询 和 联表查询。通过对比这两种查询方式的响应时间,本文旨在探讨在实际业务场景中,选择哪种方式能带来更高的查询效率,尤原创 2024-12-05 15:58:25 · 1452 阅读 · 0 评论