编程语言
首页 > 编程语言> > 基于Spring-AOP的自定义分片工具

基于Spring-AOP的自定义分片工具

作者:互联网

1 背景

随着数据量的增长,发现系统在与其他系统交互时,批量接口会出现超时现象,发现原批量接口在实现时,没有做分片处理,当数据过大时或超过其他系统阈值时,就会出现错误。由于与其他系统交互比较多,一个一个接口做分片优化,改动量较大,所以考虑通过AOP解决此问题。

2 Spring-AOP

AOP (Aspect Orient Programming),直译过来就是 面向切面编程。AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。面向对象编程将程序抽象成各个层次的对象,而面向切面编程是将程序抽象成各个切面。

Spring 中的 AOP 是通过动态代理实现的。 Spring AOP 不能拦截对对象字段的修改,也不支持构造器连接点,我们无法在 Bean 创建时应用通知。

3 功能实现

自定义分片处理分三个部分:自定义注解(MethodPartAndRetryer)、重试器(RetryUtil)、切面实现(RetryAspectAop)。

3.1 MethodPartAndRetryer

源码

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MethodPartAndRetryer {
    /**
     * 失败重试次数 
     * @return
     */
    int times() default 3;
    /**
     * 失败间隔执行时间 300毫秒
     * @return
     */
    long waitTime() default 300L;
    /**
     * 分片大小     
     * @return
     */
    int parts() default 200;
}

@interface说明这个类是个注解。
@Target是这个注解的作用域

public enum ElementType {
    /** 类、接口(包括注释类型)或枚举声明   */
    TYPE,
    /** 字段声明(包括枚举常量) */
    FIELD,
    /** 方法声明 */
    METHOD,
    /** 正式的参数声明 */
    PARAMETER,
    /** 构造函数声明 */
    CONSTRUCTOR,
    /** 局部变量声明 */
    LOCAL_VARIABLE,
    /** 注释类型声明*/
    ANNOTATION_TYPE,
    /** 程序包声明 */
    PACKAGE,
    /**类型参数声明*/
    TYPE_PARAMETER,
    /**类型的使用*/
    TYPE_USE
}
@Retention注解的生命周期

public enum RetentionPolicy {
    /** 编译器处理完后不存储在class中*/
    SOURCE,
    /**注释将被编译器记录在类文件中,但不需要在运行时被VM保留。 这是默认值*/
    CLASS,
    /**编译器存储在class中,可以由虚拟机读取*/
    RUNTIME
}

标签:Spring,数据量,连接点,功能实现,源码,系统
来源: