BUG指挥官
天下一亩三
展开
-
Spring Cloud Gateway深挖
Predicate来自于java8的接口。Predicate接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。关注公z号:码猿技术专栏,回复关键词:1111 获取阿里内部性能调优手册!可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway内置了许多Predict,这些Predict的源码在包中,有兴趣可以阅读一下。原创 2024-06-20 09:53:11 · 19 阅读 · 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 动态加载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 · 654 阅读 · 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 · 902 阅读 · 0 评论 -
Spring 系列之 Spring Framework 中的 Bean
BeanSpringFramework中的Bean是框架的核心概念之一,通过Spring容器负责创建、组装和管理对象,帮助开发者构建可维护、可扩展的应用程序。本文介绍了Bean的概念、生命周期、配置方式、依赖注入和作用域等重要内容。了解和掌握Spring中的Bean对开发者来说至关重要,它能够提高代码的可测试性、可扩展性和可维护性,使开发工作更加高效和舒适。原创 2024-02-23 10:10:51 · 49 阅读 · 0 评论 -
SpingBoot的5个扩展点,超级实用!
最后我来把扩展点图补充完整,如下所示,很清晰明了,在什么时候调用了什么,我们自己开发的时候结合应用场景,在什么时候要干什么事,就知道要创建什么类型的扩展点了。原创 2024-02-22 10:22:02 · 41 阅读 · 0 评论 -
SpringBoot 如何保证接口安全?
因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间比较,是否超过了60s,如果超过了则认为是非法请求。这种方案nonce和timestamp参数都作为签名的一部分传到后端,基于timestamp方案可以让黑客只能在60s内进行重放攻击,加上nonce随机数以后可以保证接口只能被调用一次,可以很好的解决重放攻击问题。我们知道http 是一种无状态的协议,服务端并不知道客户端发送的请求是否合法,也并不知道请求中的参数是否正确。原创 2023-06-25 15:52:08 · 689 阅读 · 0 评论 -
SpringBoot+Mybatis 流式查询太强大了!
mybatis的流式查询,有点冷门,实际用的场景比较少,但是在某些特殊场景下,却是十分有效的一个方法。很多人没有听说过,实际上是对mybatis没有太重视,对mybatis想法还停留一个dao接口对应着mapper里的一个sql,mybatis的关键是如何写好sql以及sql的优化上;使用mybatis作为持久层的框架时,通过mybatis执行查询数据的请求执行成功后,mybatis返回的结果集不是一个集合或对象,而是一个迭代器,可以通过遍历迭代器来取出结果集,避免一次性取出大量的数据而占用太多的内存。原创 2023-06-19 09:04:08 · 545 阅读 · 0 评论 -
Spring6的新特性,feign永不录用
其实,之所以OpenFeign后期不再更新,主要是因为在Spring 6.0 发布之后,Spring内置了一个HTTP客户端——@HttpExchange ,而官方肯定建议大家使用这个自带客户端进行HTTP调用。想要使用这个新的HTTP客户端,需要Spring升级到6.0,或者SpringBoot升级到3.0版本,然后再在POM中依赖spring-web。以上,就是在Spring 6.0中,使用Spring自带的@HttpExchange实现HTTP调用的例子,看起来还是比较容易使用的。原创 2023-06-16 10:28:17 · 1182 阅读 · 0 评论 -
Spring Boot如何优雅提高接口数据安全性
这样就避免数据被别人操作了,也就是加上了数据权限判断,但是却给业务逻辑增加了复杂性同时老接口业务逻辑难以适配,本质上来说web页面上看到的数据就是根据用户角色做过数据隔离的,可以这么理解你能看到哪些数据和你有那些功能菜单操作权限就差不多避免上面所说的情况了,但是保不准懂代码的人使用postman等工具恶意调接口而产生上面的情况,这个问题可以转换为怎么避免别人轻易就能调通接口,解决办法就是。等于说加密、加签的参数格式,调用方需按照上面的对象传参,当然为了提高拓展性,签名的相关信息。原创 2023-06-08 16:47:31 · 707 阅读 · 0 评论 -
Spring Boot优雅实现数据加密存储、模糊匹配和脱敏
近来我们都在围绕着使用开发业务系统时如何保证数据安全性这个主题展开总结,当下大部分的B/S架构的系统也都是基于Spring Boot + SpringMVC三层架构Spring Boot如何优雅提高接口数据安全性,可以认为是在SpringMVC的三层架构中的controller层(逻辑控制层)对接口数据进行安全处理操作,更直接点说就是在接口请求参数传入进行逻辑处理或者响应参数输出到页面展示之前进行数据处理的,所以只是在SpringMVC。原创 2023-06-08 16:39:11 · 664 阅读 · 0 评论 -
Spring Cloud Gateway的10个经典问题
Predicate来自于java8的接口。Predicate接受一个输入参数,返回一个布尔值结果。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)。关注公z号:码猿技术专栏,回复关键词:1111 获取阿里内部性能调优手册!可以用于接口请求参数校验、判断新老数据是否有变化需要进行更新操作。Spring Cloud Gateway内置了许多Predict,这些Predict的源码在包中,有兴趣可以阅读一下。内置的一些断言如下图:内置的断言。原创 2023-03-27 09:23:00 · 599 阅读 · 0 评论 -
Spring中实用的11个扩展点
spring mvc拦截器根spring拦截器相比,它里面能够获取和等web对象实例。preHandle 目标方法执行前执行postHandle 目标方法执行后执行afterCompletion 请求完成时执行为了方便我们一般情况会用接口的实现类类。假如有权限认证、日志、统计的场景,可以使用该拦截器。第一步,继承@Override}}System.out.println("===权限校验===");原创 2023-01-04 16:34:52 · 2414 阅读 · 3 评论 -
Spring Cloud Feign 第一次调用超时(Read timed out)的解决办法
feign-client在第一次调用微服务会出现Read timed out异常,提示的报错信息: java.net.SocketTimeoutException: Read timed out 这是由于在调用其他微服务接口前,会去请求该微服务的相关信息(地址、端口等),并做一些初始化操作,由于默认的懒加载特性,导致了在第一次调用时,出现超时的情况,解决方法主要有两种: 第一种办法是设置超时时间,具体设置成多少,因项目而异,配置如下: # 全局关闭Hystrix超时,对所有微服务..原创 2021-05-19 16:52:01 · 7032 阅读 · 0 评论 -
SpringCloud Gateway RequestRateLimiter
参考:API Rate Limiting with Spring Cloud GatewaySpring Microservices Security Best Practices示例配置按照key-resolver解析出的id(字符串key,用于唯一区分用户、IP等等)进行请求限流,限流算法采用基于redis lua脚本实现的令牌桶算法,具体配置见如下说明:server: port: 8088spring: application: name: mx-gateway-op原创 2021-12-17 11:03:05 · 1357 阅读 · 0 评论 -
Feign的性能优化
我们可以通过查看Feign的底层源码看到,Feign的默认使用的URLConnection去发送请求的,他是没有连接池的。但是Feign底层除了使用URLConnection发送请求以外,还支持使用Apache的HTTPClient以及OKHTTP去发送请求,而Apache的HTTPClient以及OKHTTP都是支持连接池的性能优化1----配置连接池配置连接池之后,性能大约能提升15%左右使用Apache的HTTPClient为例,来为Feign配置连接池第一步:加依赖原创 2022-01-19 15:27:20 · 2598 阅读 · 0 评论 -
Spring Cloud Gateway整合OAuth2.0 实现分布式统一认证授权
今天这篇文章介绍一下Spring Cloud Gateway整合OAuth2.0实现认证授权,涉及到的知识点有点多,有不清楚的可以看下陈某的往期文章。文章目录如下:微服务认证方案微服务认证方案目前有很多种,每个企业也是大不相同,但是总体分为两类,如下:网关只负责转发请求,认证鉴权交给每个微服务商控制 统一在网关层面认证鉴权,微服务只负责业务你们公司目前用的是哪种方案?先来说说第一种方案,有着很大的弊端,如下:代码耦合严重,每个微服务都要维护一套认证鉴权 无法做到统一认证鉴权原创 2022-01-24 15:23:28 · 11832 阅读 · 13 评论 -
Spring Cloud Gateway+nacos灰度发布
前言之前看过spring-cloud-gateway 系列文章, 今天再来补充一篇关于灰度发布的。传送门:spring-cloud-gateway 简介 spring-cloud-gateway 过滤器实践 spring-cloud-gateway 静态路由 spring-cloud-gateway 动态路由 spring-cloud-gateway 限流 spring-cloud-gateway 降级今天的文章主题会按照如下三步曲进行记录:基于 nacos 的基础项目搭建 动态.原创 2022-01-25 16:15:31 · 2618 阅读 · 1 评论 -
基于springcloud gateway + nacos实现灰度发布
什么是灰度发布?灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。本文以springcloud gateway + nacos来演示如何实现灰度发布,如果对springcloud gateway和nacos还不熟悉的朋友,原创 2022-01-26 10:12:00 · 2123 阅读 · 0 评论 -
Gateway之过滤器
过滤器的作用:过滤器就是在请求的过程中,对请求和响应做一些手脚生命周期:Pre Post分类:局部过滤器(作用在某一个路由上) 全局过滤器(作用在全部路由上)在Gateway中,Filter的生命周期只有两个:“pre”和“post”。PRE:这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送.原创 2022-03-06 16:04:22 · 3922 阅读 · 1 评论 -
关于使用Spring Cloud Gateway网关网络连接的4个重要的参数配置
整理出这四个重要的参数,说起来很不易,来源于一次网络故障事故后的调查,对于平时使用Spring Cloud Gateway(简称scg)来说这些参数几乎很少会关注到,从网上也很少能看到讲解的文章,表面上是SCG的问题,实则都是和SCG的底层网络通信框架Netty有关系。率先曝光一下这4个参数System.setProperty("reactor.netty.pool.leasingStrategy", "lifo");spring.cloud.gateway.httpclient.pool.max原创 2022-03-29 17:03:23 · 5793 阅读 · 0 评论 -
ZooKeeper、Eureka、Consul、Nacos的选型对比
ZooKeeper、Eureka、Consul、Nacos的选型对比1|2四种常用注册中心zookeeperzookeeper的基础知识以及基本的架构原理,互联网Java工程师面试突击第三季,里面是有讲过zk的一些架构原理,如果大家不了解的话,可以去看一下【leader+follower的架构】【服务主要是2个动作,一个是服务发现,一个是服务发现,别人要读取服务相关的一些信息】【服务注册就是向ZK Leader写入数据。ZK集群是基于ZAB协议,ZAB协议跟raft协议有原创 2022-03-07 13:13:20 · 2537 阅读 · 0 评论 -
SpringCloud Feign 之 超时重试次数探究
对Feign的fallback有一个初步的体验,在这里我们回顾一下,Fallback主要是用来解决依赖的服务不可用或者调用服务失败或超时,使用默认的返回值。实际应用中, 在Fallback之前,需要对服务配置重试机制,当多次重试服务,还是服务不可用的情况下,就触发Fallback。这里,我们对重试机制配置以及重试次数进行一次探究。Feign的超时Feign接口调用分两层,Ribbon(负载均衡)和Hystrix(熔断器)的调用,因此Feign的超时时间就是ribbon的超时时间和Hystri原创 2022-03-31 15:07:57 · 2162 阅读 · 0 评论 -
Spring Cloud Gateway 实现XSS、SQL注入拦截
创建Filter 实现GlobalFilter, Ordered @Slf4j@Componentpublic class SqLinjectionFilter implements GlobalFilter, Ordered { @SneakyThrows @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){ // grab config原创 2022-04-06 10:25:29 · 4473 阅读 · 1 评论 -
OpenFeign 的 9 个坑,每个都能让你的系统奔溃
OpenFeign是SpringCloud中的重要组件,它是一种声明式的HTTP客户端。使用OpenFeign调用远程服务就像调用本地方法一样,但是如果使用不当,很容易踩到坑。坑一:用对Http Clientfeign中http client如果不做特殊配置,OpenFeign默认使用jdk自带的HttpURLConnection,我们知道HttpURLConnection没有连接池、性能和效率比较低,如果采用默认,很可能会遇到性能问题导致系统故障。可以采用Apache HttpClie..原创 2022-03-31 15:03:41 · 900 阅读 · 0 评论 -
SpringBoot中的线程池知多少
使用步骤 是我配置在application.properties,可以参考配置,自由定义 创建一个Service接口,是异步线程的接口 实现类 接下来就是在Controller里或者是哪里通过注解@Autowired注入这个Service 用postmain或者其他工具来多次测试请求一下 如下方式会使@Async失效 一、异步方法使用static修饰 二、异步类没有使用@Component注解(或其他注解)导致spri原创 2022-12-07 14:21:00 · 404 阅读 · 0 评论 -
Hystrix 参数详解及设置样例
Hystrix 参数详解hystrix.command.default和hystrix.threadpool.default中的default为默认CommandKeyCommand PropertiesExecution相关的属性的配置:hystrix.command.default.execution.isolation.strategy 隔离策略,默认是Thread, 可选Thread|Semaphorehystrix.command.default.execution.isolatio原创 2022-04-15 14:29:32 · 2444 阅读 · 0 评论