【Vesta发号器源码】IdServiceImpl

2019-05-14  本文已影响0人  DeanChangDM

Vesta发号器源码解析——IdServiceImpl

这个类是继承了AbstractIdServiceImpl的一个具体的实现

字段属性及构造方法

    //参数名称,用于在启动的时候传入标示使用synchronized关键字与否
    private static final String SYNC_LOCK_IMPL_KEY = "vesta.sync.lock.impl.key";
    //参数名称,用于在启动的时候传入标示使用Atomic与否
    private static final String ATOMIC_IMPL_KEY = "vesta.atomic.impl.key";
    //存储id生成器
    protected IdPopulator idPopulator;
    //构造方法,无参
    public IdServiceImpl() {
        super();
    }
    //构造方法,传入参数id类型名
    public IdServiceImpl(String type) {
        super(type);
    }
    //构造方法,传入参数id类型值
    public IdServiceImpl(long type) {
        super(type);
    }
    //构造方法,传入参数id类型枚举
    public IdServiceImpl(IdType type) {
        super(type);
    }

初始化方法

    @Override
    public void init() {
        //先初始化父类
        super.init();
        //然后初始化id生成器
        initPopulator();
    }

id生成器初始化

    
    public void initPopulator() {
        //如果不为空说明已经设置过了,跳过
        if (idPopulator != null){
            log.info("The " + idPopulator.getClass().getCanonicalName() + " is used.");
        } else if (CommonUtils.isPropKeyOn(SYNC_LOCK_IMPL_KEY)) {
            log.info("The SyncIdPopulator is used.");
            //启动时参数标识了使用synchronized关键字
            idPopulator = new SyncIdPopulator();
        } else if (CommonUtils.isPropKeyOn(ATOMIC_IMPL_KEY)) {
            //标识了使用atomic
            log.info("The AtomicIdPopulator is used.");
            idPopulator = new AtomicIdPopulator();
        } else {
            //默认采用Lock来实现
            log.info("The default LockIdPopulator is used.");
            idPopulator = new LockIdPopulator();
        }
    }

id生成器调用和id生成器设置

    //调用id生成器构成id
    protected void populateId(Id id) {
        idPopulator.populateId(timer, id, idMeta);
    }
    //设置id生成器
    public void setIdPopulator(IdPopulator idPopulator) {
        this.idPopulator = idPopulator;
    }
上一篇下一篇

猜你喜欢

热点阅读