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

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

1.  InheritableThreadLocal的使用

/**
 * xxl-job context
 *
 * @author xuxueli 2020-05-21
 * [Dear hj]
 */
public class XxlJobContext {

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

    private static InheritableThreadLocal<XxlJobContext> contextHolder = new InheritableThreadLocal<XxlJobContext>(); // 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框架中没有注意的点,我都会在这里整理一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值