BUG指挥官
天下一亩三
展开
-
Spring Cloud Gateway深挖
Predicate来自于java8的接口。Predicate接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。关注公z号:码猿技术专栏,回复关键词:1111 获取阿里内部性能调优手册!可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway内置了许多Predict,这些Predict的源码在包中,有兴趣可以阅读一下。原创 2024-06-20 09:53:11 · 22 阅读 · 0 评论 -
聊聊@Async注解遇到的问题
看到BeanCurrentlyInCreationException这个异常,我的第一反应是出现了循环依赖的问题。但是仔细一想,Spring不是已经解决了循环依赖的问题么,怎么还报这个错。于是,我就询问小姐姐改了什么东西,她说在方法上加了@Async注解。这里我模拟一下当时的代码,AService 和 BService 相互引用,AService的 save() 方法加了 @Async 注解。原创 2024-03-05 11:00:55 · 79 阅读 · 0 评论 -
OpenFeign核心原理
这一节主要是介绍了7个Feign的核心组件以及Spring对应的扩展实现为了方便你查看,我整理了如下表格接口作用Feign默认实现Spring实现Contract解析方法注解和参数,将Http请求参数和方法参数对应Encoder将请求体对应的方法参数序列化成字节数组Decoder将响应体的字节流反序列化成方法返回值类型对象Client发送Http请求InvocationHandler工厂,动态代理核心逻辑无在发送Http请求之前,再对Http请求的内容进行拦截修改无无。原创 2024-02-29 18:09:22 · 104 阅读 · 0 评论 -
SpringBoot Redis 分布式锁的正确实现方式
使用上面的脚本,每个锁都用一个随机值作为唯一标识,当删除锁的客户端的“唯一标识”与锁的 value 匹配的时候,才能执行删除操作。加锁的代码应该写在 try {} 代码中,放在 try 外面的话,如果执行加锁异常(客户端网络连接超时),但是实际指令已经发送到服务端并执行,就会导致没有机会执行解锁的代码。此外,为了让程序更加健壮,码哥实现了阻塞等待获取分布式锁,让你用的更加开心,面试不慌加薪不难。一个分布式锁方案出来了,一气呵成,组员不明觉厉,纷纷竖起大拇指,伪代码如下。然而,这是一个错误的分布式锁。原创 2024-02-27 13:47:50 · 235 阅读 · 0 评论 -
SpringBoot 动态加载jar包,动态配置
URLClassLoader 是一种特殊的类加载器,可以从指定的 URL 中加载类和资源。它的主要作用是动态加载外部的 JAR 包或者类文件,从而实现动态扩展应用程序的功。为了便于管理动态加载的jar包,自定义类加载器继承URLClassloader。/*** 自定义类加载器*/@Override// 从已加载的类集合中获取指定名称的类Class<?if (clazz!= null) {try {// 调用父类的findClass方法加载指定名称的类。原创 2024-02-26 14:47:36 · 99 阅读 · 0 评论 -
Spring Boot 的参数校验方案
在平时的开发工作中,我们通常需要对接口进行参数格式验证。当参数个数较少(个数小于3)时,可以使用手动进行参数验证。当参数个数大于3个时,使用进行参数验证就会让代码显得臃肿,这个时候推荐使用注解来进行参数验证。我们在全局异常处理类中使用捕获异常,获取参数验证异常信息,最后返回统一的异常结果格式。除了框架自带的注解,平时的工作中可能需要我们自定义验证注解处理特定的业务需求。这里汪小成将上面User类中的手机号格式验证改成使用自定义注解的验证方式。4.2.1 定义注解。原创 2024-02-23 11:42:35 · 655 阅读 · 0 评论 -
谈谈Redis的哈希槽和一致性哈希
一种是一致性哈希 , 这种算法在 适用dis Cluster方案中并没有实现,主要在外部的代理模式 (Twemproxy)一种是 Slot 哈希槽算法 ,这种算法就是 Cluster 的核心算法所以谈到这个问题的时候,不能只讲一部分。在Redis 3.0 之前,Redis 是没有集群方案的,在这个时期实现 Redis 的分布式主要由客户端自行实现。一般的实现方式就是一致性 Hash。而 Redis 3.0之后,Redis 实现了 Cluster 集群,也就采用了相对而言更简洁的 Slot 槽方式。原创 2024-02-23 11:30:48 · 324 阅读 · 0 评论 -
SpringBoot实现缓存预热方案
使用启动监听事件实现缓存预热。使用 @PostConstruct 注解实现缓存预热。使用 CommandLineRunner 或 ApplicationRunner 实现缓存预热。通过实现 InitializingBean 接口,并重写 afterPropertiesSet 方法实现缓存预热。原创 2024-02-23 11:22:29 · 903 阅读 · 0 评论 -
SpringBoot接口防抖(防重复提交)的实现方案
在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。key分隔符是用来将多个参数合并在一起的,比如userName是张三,userPhone是123456,那么完整的key就是"张三&123456",最后再加上redis锁前缀,就组成了一个唯一key。从测试的结果上看,防抖是做到了,但是随着缓存消失、锁失效,还是可以发起同样的请求,所以要真正做到接口幂等性,还需要业务代码的判断、设置数据库表的UK索引等操作。转载 2024-02-23 11:10:02 · 173 阅读 · 0 评论 -
解锁 SpringBoot 的强大配置功能
ConfigurationProperties 和 @PropertySources 都是与属性配置相关的注解,用于在 Spring 应用程序中管理和加载配置信息。原创 2024-02-20 09:58:58 · 65 阅读 · 0 评论 -
Sa-Token + SpringBoot 实现登录鉴权
Sa-Token是一个轻量级Java权限认证框架。主要解决的问题如下:登录认证权限认证单点登录OAuth2.0分布式Session会话微服务网关鉴权等一系列权限相关问题。Sa-Token框架是一个轻量级的登录、鉴权框架,有利于我们开发。Sa-Token框架的官方文档:https://sa-token.cc/doc.html#/原创 2023-07-17 09:39:41 · 641 阅读 · 0 评论 -
SpringBoot项目限流方案
在大多数的微服务架构在设计之初,比如在技术选型阶段,架构师会从一个全局的视角去规划技术栈的组合,比如结合当前产品的现状考虑是使用dubbo?还是springcloud?作为微服务治理的底层框架。甚至为了满足快速的上线、迭代和交付,直接以springboot为基座进行开发,后续再引入新的技术栈等...所以在谈论某个业务场景具体的技术解决方案时不可一概而论,而是需要结合产品和业务的现状综合评估,以限流来说,在下面的不同的技术架构下具体在选择的时候可能也不一样。原创 2023-06-30 09:04:01 · 226 阅读 · 0 评论