【Vesta发号器源码】DbMachineIdProvider

Vesta发号器源码解析——DbMachineIdProvider

数据库持有machineId的模式

相关字段和构造方法

    //日志记录
    private static final Logger log = LoggerFactory
            .getLogger(DbMachineIdProvider.class);
    
    //machineId的记录
    private long machineId;
    //jdbcTemplate
    private JdbcTemplate jdbcTemplate;
    //构造方法记录日志
    public DbMachineIdProvider() {
        //这个地方源代码中错了,应修改
        //原始:
        //log.debug("IpConfigurableMachineIdProvider constructed.");
        //改为:
        log.debug("DbMachineIdProvider constructed.");
    }


初始化方法

    public void init() {
        //利用工具类读取主机IP
        String ip = IpUtils.getHostIp();
        //判断是否正确读取了IP,如果失败了,停止初始化,抛出异常
        if (StringUtils.isEmpty(ip)) {
            String msg = "Fail to get host IP address. Stop to initialize the DbMachineIdProvider provider.";

            log.error(msg);
            throw new IllegalStateException(msg);
        }
        
        //查询数据库
        Long id = null;
        try {
            id = jdbcTemplate.queryForObject(
                    "select ID from DB_MACHINE_ID_PROVIDER where IP = ?",
                    new Object[]{ip}, Long.class);

        } catch (EmptyResultDataAccessException e) {
            // 记录日志忽略这个异常
            log.error("No allocation before for ip {}.", ip);
        }
        
        //id查找成功,赋值后初始化完成,返回
        if (id != null) {
            machineId = id;
            return;
        }
        //记录日志,失败,没能获取到ip对应的id
        log.info(
                "Fail to get ID from DB for host IP address {}. Next step try to allocate one.",
                ip);
        //分配一个id
        int count = jdbcTemplate
                .update("update DB_MACHINE_ID_PROVIDER set IP = ? where IP is null limit 1",
                        ip);
        //如果更新条数大于1或者小于等于0,说明出现不合法状态,记录日志后抛异常失败,返回
        if (count <= 0 || count > 1) {
            String msg = String
                    .format("Fail to allocte ID for host IP address {}. The {} records are updated. Stop to initialize the DbMachineIdProvider provider.",
                            ip, count);

            log.error(msg);
            throw new IllegalStateException(msg);
        }
        
        //重新查询一次
        try {
            id = jdbcTemplate.queryForObject(
                    "select ID from DB_MACHINE_ID_PROVIDER where IP = ?",
                    new Object[]{ip}, Long.class);

        } catch (EmptyResultDataAccessException e) {
            //忽略异常
            log.error("Fail to do allocation for ip {}.", ip);
        }

        //仍然没有找到,抛出异常记录日之后结束初始化
        if (id == null) {
            String msg = String
                    .format("Fail to get ID from DB for host IP address {} after allocation. Stop to initialize the DbMachineIdProvider provider.",
                            ip);

            log.error(msg);
            throw new IllegalStateException(msg);
        }
        //赋值,初始化完成
        machineId = id;
    }

字段的getter和setter

    public long getMachineId() {
        return machineId;
    }

    public void setMachineId(long machineId) {
        this.machineId = machineId;
    }

    public JdbcTemplate getJdbcTemplate() {
        return jdbcTemplate;
    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 为感受并进一步弘扬红色革命精神,7月6日,浙江海洋大学东海科学技术学院“青春践行中国梦,共筑群岛新未来”赴蚂蚁岛实...
    水晶jing阅读 257评论 0 0
  • 齐齐哈尔中医院举行宴会欢迎李道政师父来齐中医师承带教,全体弟子集体朗诵了一首创作的诗,献给师父,感恩齐中医建立名医...
    Helen执砭人阅读 630评论 0 3
  • 地表最强挪威追光女团的各个小分队已经陆续回国,此次挪威之行终于还是落下了帷幕。带着身体的疲惫和内心的满足,回到家里...
    培先生的火龙果阅读 349评论 0 0
  • 这是我每天一篇文章的第71篇。 从去年下半年开始,亚马逊新出的一个促销工具-优惠券,上线到现在,效果异常好用。 在...
    胡子猫猫阅读 9,698评论 0 0
  • 自从再次提笔画画就觉得水彩好美,一直想买来画,前几天水彩终于到手,第一次画,惨的不得了 因为卖家发错货,所以只有一...
    惠Sunny阅读 519评论 6 10