SpringBoot中如何实现限流,这种方式才叫优雅!( 二 )

注意到类上我加了一行@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完整目录结构如下:

SpringBoot中如何实现限流,这种方式才叫优雅!

文章插图
 
第五步,在项目中引用限流组件
  1. 引入依赖
<dependency><groupId>com.jianzh5</groupId><artifactId>cloud-limit-starter</artifactId></dependency>
  1. 在Application.properties中设置加载的限流组件
limit.type = redis如果不配置此属性则不加载对应限流功能 。
  1. 在需要限流的接口上加上注解
@Limit(key = "Limiter:test",limitNum = 3,seconds = 1)小结通过上述步骤,我们已经成功实现了一个通用限流组件 。在实际应用中,只需要根据场景需求选择对应的限流机制,即可非常方便的进行限流操作 。这种灵活性和便捷性,也是SpringBoot中定义Starter的一般套路 。
如果你想详细了解这两种限流机制的原理,可以参考之前的文章中所介绍的内容 。

【SpringBoot中如何实现限流,这种方式才叫优雅!】


推荐阅读