【程序媛晒83行代码】认真工作的程序媛原来是这样,你想到了嘛?

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 据说认真工作的程序员魅力值加10,这段代码你能猜的出来嘛。

在中国程序媛中,他们的代码有什么样的魅力,Aone联合云栖社区、饿了么、钉钉、阿里云、天猫、口碑发起首届程序媛比码活动——不秀大长腿,秀高智商;不秀美图照,秀代码图,参与晒码互动游戏赢“83行代码”T恤!

我们来说说这群女工程师的第83行代码及代码背后的故事:
我是云效的全栈开发女工程师,朱默,花名:墨瑜。

据说认真工作的程序员魅力值加10:
b2e3cef0bcef172cade954da904bdfdcf1e29082
我的第83行代码来自云效RDC上某一功能的代码, 猜猜是哪个功能:

public class MysqlLockBuilder {
    private DataSource dataSource;
    private String mysqlTableName;

    private LockDataAccessor lockDataAccessor;

    private LockStateAccessor lockStateAccessor;
    private String defaultClientId;

    public void init() throws SQLException {
        MysqlLockDataAccessor mysqlLockDataAccessor = new MysqlLockDataAccessor();
        mysqlLockDataAccessor.setMysqlTableName(mysqlTableName);
        mysqlLockDataAccessor.setConnection(dataSource.getConnection());
        lockDataAccessor = mysqlLockDataAccessor;

        defaultClientId = IP.getIpAddr();

        lockStateAccessor = buildMysqlLockStateAccessor();
    }

    private LockStateAccessor buildMysqlLockStateAccessor() throws SQLException {
        MysqlLockStateAccessor lockStateAccessor = new MysqlLockStateAccessor();
        lockStateAccessor.setMysqlTableName(mysqlTableName);
        lockStateAccessor.setConnection(dataSource.getConnection());
        lockStateAccessor.init();
        return lockStateAccessor;
    }

    public String getDefaultClientId() {
        return defaultClientId;
    }

    public void setDefaultClientId(String defaultClientId) {
        this.defaultClientId = defaultClientId;
    }

    public TimedLock lockForAWhile(String lockId, int timeout) throws LockAccessException {
        TimedLock lock = new TimedLock(lockId, defaultClientId, timeout);
        try {
            lock.setLockStateAccessor(buildMysqlLockStateAccessor());
            lock(lock);
            return lock;
        } catch (SQLException e){
            lock.close();
            throw new LockAccessException(e);
        } catch (LockAccessException e) {
            lock.close();
            throw e;
        }
    }

    public ScopedLock lockWhenAlive(String lockId) throws LockAccessException {
        ScopedLock lock = new ScopedLock(lockId, defaultClientId);
        try {
            lock.setLockStateAccessor(buildMysqlLockStateAccessor());
            lock(lock);
            return lock;
        } catch (SQLException e){
            lock.close();
            throw new LockAccessException(e);
        } catch (LockAccessException e){
            lock.close();
            throw e;
        }
    }

    /**
     * 指定clientId,加时间锁
     * @param lockId: 锁名称
     * @param timeout: 加锁时长
     * @param clientId: 锁的持有者
     * @return
     * @throws LockAccessException
     */
    public TimedLock lockForAWhileByClient(String lockId, int timeout, String clientId) throws LockAccessException {
        TimedLock lock = new TimedLock(lockId, clientId, timeout);
        try {
            LockStateAccessor timeLockStateAccessor = buildMysqlLockStateAccessor();
            lock.setLockStateAccessor(timeLockStateAccessor);
            lock(lock);
            return lock;
        } catch (SQLException e){
            lock.close();
            throw new LockAccessException(e);
        } catch (LockAccessException e) {
            lock.close();
            throw e;
        }
    }

    /**
     * 刷新时间锁,延长加锁时长
     * @param lockingContext
     * @return
     * @throws LockAccessException
     */
    public Boolean refreshTimeLockByContext(LockingContext lockingContext) throws LockAccessException {
        if(lockStateAccessor == null){
            try {
                lockStateAccessor = buildMysqlLockStateAccessor();
            }catch (SQLException e) {
                throw new LockAccessException(e);
            }
        }

        return lockStateAccessor.refreshTimeLock(lockingContext);
    }

    /**
     * 手动解锁
     * @param lockingContext
     * @return
     * @throws LockAccessException
     */
    public Boolean unlockTimeLockByContext(LockingContext lockingContext) throws LockAccessException {
        if(lockStateAccessor == null){
            try {
                lockStateAccessor = buildMysqlLockStateAccessor();
            }catch (SQLException e) {
                throw new LockAccessException(e);
            }
        }

        return lockStateAccessor.timedUnlock(lockingContext);
    }

    /**
     * 根据锁id,获取时间锁信息
     * @param lockId
     * @return
     * @throws LockAccessException
     */
    public LockingInfo getTimedLockInfo(String lockId) throws LockAccessException{
        return lockStateAccessor.getTimedLockingInfo(lockId);
    }

    private void lock(Lockable lock) throws LockAccessException {
        try {
            lockDataAccessor.createIfNotPresent(lock.id());

            boolean locked = lock.lock();
            if (!locked) {
                throw new LockAccessException("Lock has been occupied");
            }
        } catch (Exception e) {
            throw new LockAccessException(e);
        }
    }

    public String getMysqlTableName() {
        return mysqlTableName;
    }

    public void setMysqlTableName(String mysqlTableName) {
        this.mysqlTableName = mysqlTableName;
    }

    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    public DataSource getDataSource() {
        return dataSource;
    }

}

与墨瑜小姐姐互动,为她打call——>点击进去墨瑜晒码

更多小姐姐,点击进入查看代码

有被代码耽误的钉钉吃货程序媛,写代码写到忘记吃饭的——采霜
她急需能把她从代码中叫醒去吃饭的小伙伴,赶紧勾搭;
http://yq.aliyun.com/roundtable/126499/answer/170319#visit170319


有以代码为乐的饿了么大前端打(bei)杂(guo)工程师——敖天羽
http://yq.aliyun.com/roundtable/126499/answer/170299#visit170299


还有全栈美女工程师——前端后端一锅端的——墨瑜女神
http://yq.aliyun.com/roundtable/126499/answer/170316#visit170316


还有阿里云活好码赞,像男人一样活着的技术专家小姐姐——清宵http://yq.aliyun.com/roundtable/126499/answer/170296#visit170296


和天猫Java程序媛,happy(被)来(逼)的——采月
http://yq.aliyun.com/roundtable/126499/answer/170354#visit170354


阿里口碑 搜索推荐组的JAVA女工程师——妍霏
http://yq.aliyun.com/roundtable/126499/answer/214059#visit214059


阿里口碑基础平台技术部的工程师-衔远,一个技术与马甲线并存的mm
http://yq.aliyun.com/roundtable/126499/answer/248798#visit248798

云栖社区聚能聊专家,具有知性温婉气质的——海洋的云http://yq.aliyun.com/roundtable/126499/answer/170290#visit170290

福州市五佰网络科技有限公司的Java女工程师——江小白太白
http://yq.aliyun.com/roundtable/126499/answer/189332#visit189332


在下*的程序媛——cn_suqingnian
http://yq.aliyun.com/roundtable/126499/answer/170309#visit170309


交通银行的前端女工程师——昆0830
http://yq.aliyun.com/roundtable/126499/answer/201979#visit201979

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
JSON 前端开发 JavaScript
前端小白躺平摆烂可以吗?
开局即炼狱模式,前端小白躺平摆烂可以吗 这几年毕业的大学生有多苦都不必我们说了。大学才4年,疫情占3年,好不容易熬到毕业,找工作又进入了炼狱模式。 整个互联网裁员裁到上了热搜,之前选择这个专业时所幻想的高薪梦,大厂梦,受到现实的无情打脸。
前端小白躺平摆烂可以吗?
|
Java 程序员
一个程序员的中秋节碎碎念
2022 年中秋节非常特殊,和教师节同一天。 在这个特殊的日子里,谈谈我的中秋仪式感,中秋计划怎么过,并谈谈自己的一些收获和感悟。
263 0
一个程序员的中秋节碎碎念
|
小程序 数据安全/隐私保护 计算机视觉
切勿外传,我要把我的写作“小心思”放出来了!| 年终总结之学习篇🚩
切勿外传,我要把我的写作“小心思”放出来了!| 年终总结之学习篇🚩
177 0
切勿外传,我要把我的写作“小心思”放出来了!| 年终总结之学习篇🚩
|
算法 前端开发 搜索推荐
学编程的 3 个正经建议,学弟学妹们记得收藏呀,这波赚大发了!
学编程的 3 个正经建议,学弟学妹们记得收藏呀,这波赚大发了!
149 0
|
人工智能 文字识别 小程序
千万创业者的自白:踩过坑才明白这些真相
在轰轰烈烈的创业大潮中,市场竞争指数也急速上升,今年1月至9月,中国初创企业的融资额较上年同期下降了46%。在竞争如此激烈的大环境下,唯有更加高效、高质的数字化办公,才是企业突出重围的不二法门。尤其是对中小企业来说,必须时刻保持业务创新,灵活应对市场需求,才能在瞬息万变的数字经济时代中生存下来,并战胜其他竞争对手。
千万创业者的自白:踩过坑才明白这些真相
|
人工智能 文字识别 小程序
千万创业者的自白:踩过坑才明白这些真相!
阿里云企业应用中心是中小企业通向成功的“独门秘籍”:美式快餐店“乐可斯”通过阿里云多端小程序自建点餐平台,沉淀了大批忠实用户,节省了15%-20%的第三方费用,翻台率提升近一半;2019年双11期间,阿里云企业应用中心为商标、工商注册、域名注册等提供了百万次服务......
1606 0
千万创业者的自白:踩过坑才明白这些真相!
|
新零售 程序员
工作五年“攒”够100万,程序猿们,我可没开玩笑!8条建议抱走不谢
对于一个刚刚工作几年的程序员来说,拥有100万人民币存款却是一个看似难以实现的目标,然而只要作为程序员合的你们做好合理的规划,这个目标是不难实现的,而且当五年过去之后,你可能发现你不止拥有了这100万存款,还提升了自己的“财商”。程序员如何实现工作五年“攒”够100万,本文就给你细细道来。
7100 0
|
算法 搜索推荐
【技术小火车】万万没想到!原来你是这样的算法君?!
据说算法正在统治世界?吓得我瓜子都掉了......
5795 0
|
Java 程序员
一个“码农”自述的血泪史:当了35年程序员,我最大的遗憾就是没抓住机遇转行
注:这是一个“一子错,满盘皆落索”的故事。兢兢业业干了35年的程序员,最后却认识到,程序员的力量太过微小。无论你写程序有多厉害,你都很难有权力真正改变一些失败的产品、失败的项目。
1522 0