栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

XXL-JOB源码解析:3.源码学习过程中了解的其他知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XXL-JOB源码解析:3.源码学习过程中了解的其他知识点

       通过学习XXL-JOB也是看到了很多以前自己没有注意到的Java基础知识或者Spring框架的知识点,当前只是整理了下面两个点,后续如果在学习XXL-JOB框架有其他学到的点也会汇总到这个地方。 1.  InheritableThreadLocal的使用
public class XxlJobContext {

.........
.........

    private static InheritableThreadLocal contextHolder = new InheritableThreadLocal(); // support for child thread of job handler)

    public static void setXxlJobContext(XxlJobContext xxlJobContext){
        contextHolder.set(xxlJobContext);
    }

    public static XxlJobContext getXxlJobContext(){
        return contextHolder.get();
    }

}

       XXL-JOB中的XxlJobContext 使用了InheritableThreadLocal,关于ThreadLocal的使用以及原理,可以参考如下博客:

Java中的ThreadLocal详解 - 夏末秋涼 - 博客园一、ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线https://www.cnblogs.com/fsmly/p/11020641.html上面博客详细讲解了ThreadLocal以及InheritableThreadLocal的原理以及实现,推荐大家参考。

2.  Spring中的 InitializingBean接口

        XXL-JOB初始化启动Admin组件,通过实现Spring中的 InitializingBean接口中的 afterPropertiesSet 方法完成 XxlJobScheduler的初始化,包含所有需要线程的启动,包含触发线程池、注册去注册线程池、异常警告线程等等重要线程池以及线程的启动。

        XxlJobAdminConfig主要是通过实现了InitializingBean, DisposableBean 来分别完成xxlJobScheduler的初始化以及销毁操作。

@Component
public class XxlJobAdminConfig implements InitializingBean, DisposableBean {

    private static XxlJobAdminConfig adminConfig = null;
    public static XxlJobAdminConfig getAdminConfig() {
        return adminConfig;
    }


    // ---------------------- XxlJobScheduler ----------------------

    private XxlJobScheduler xxlJobScheduler;

    @Override
    public void afterPropertiesSet() throws Exception {
        adminConfig = this;

        xxlJobScheduler = new XxlJobScheduler();
        xxlJobScheduler.init();
    }

    @Override
    public void destroy() throws Exception {
        xxlJobScheduler.destroy();
    }
    ............
    ............
}

        关于InitializingBean的使用参考如下博文:

Spring中的InitializingBean接口的使用 - 卫旗 - 博客园InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。 测试,如下: 配置文https://www.cnblogs.com/weiqihome/p/8922937.html当然也可以采用init-method方法完成初始化操作。大家可以参考上述博文了解这个知识点。

                上述两个点是以前代码学习中没有注意到的,在这次看到的很多Java或者Spring框架中没有注意的点,我都会在这里整理一下。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/605587.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号