注意到类上我加了一行@Conditional(LimitAspectCondition.class),使用了自定义条件选择器,意思是只有当配置类中出现了limit.type属性时才会加载这个AOP 。
public class LimitAspectCondition implements Condition {@Overridepublic boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {//检查配置文件是否包含limit.type属性return conditionContext.getEnvironment().containsProperty(ConfigConstant.LIMIT_TYPE);}}
第四步,创建spring.factories文件,引导SpringBoot加载配置类## AutoConfigurationorg.springframework.boot.autoconfigure.EnableAutoCnotallow=com.jianzh5.limit.config.LimiterConfigure,com.jianzh5.limit.aop.LimitAspect
完整目录结构如下:
文章插图
第五步,在项目中引用限流组件
- 引入依赖
<dependency><groupId>com.jianzh5</groupId><artifactId>cloud-limit-starter</artifactId></dependency>
- 在Application.properties中设置加载的限流组件
limit.type = redis
如果不配置此属性则不加载对应限流功能 。- 在需要限流的接口上加上注解
@Limit(key = "Limiter:test",limitNum = 3,seconds = 1)
小结通过上述步骤,我们已经成功实现了一个通用限流组件 。在实际应用中,只需要根据场景需求选择对应的限流机制,即可非常方便的进行限流操作 。这种灵活性和便捷性,也是SpringBoot中定义Starter的一般套路 。如果你想详细了解这两种限流机制的原理,可以参考之前的文章中所介绍的内容 。
【SpringBoot中如何实现限流,这种方式才叫优雅!】
推荐阅读
- SpringBoot中使用PostgreSQL数据库
- JavaScript中根据字符串中的范围规则,判断当前值是否符合条件
- SpringBoot对SpringMVC的自动配置,你知道多少?
- 李彦宏:中国基本不会再出一个OpenAI,创业公司重做ChatGPT没多大意义
- 一道题,测试你是否“睡眠障碍”,中医推荐几个方法缓解失眠
- 罗兰|曝于文红老公出轨成性!曾睡4000多名中国姑娘,每月零用钱仅5万
- 泽口靖子|昭和美人泽口靖子,皇太子的梦中情人,世界首富的追求对象
- 胡萝卜里面有什么维生素
- 小茴香能下奶吗
- 李崇霄|中国首位公开艾滋病女孩朱力亚,自曝被黑人男友传染,却仍爱他很深