xxljob是轻量级任务调度框架
SmartInitializingSingleton是spring的扩展外露接口之一
(当所有单例 bean 都初始化完成以后, Spring的IOC容器会回调该接口的 afterSingletonsInstantiated()方法)
创建一个xxljob的配置环境(建立一个家)
XxlJobConfig配置类
在配置类中注入xxljob的执行器 XxlJobSpringExecutor(为家里添加人,劳动力)
XxlJobSpringExecutor 实现spring框架的接口(添加人的时候给每个人分配任务)
1、ApplicationContextAware接口
2、SmartInitializingSingleton接口
实现SmartInitializingSingleton接口的afterSingletonsInstantiated方法,方法里的逻辑自定义
spring框架出场,现在要把多个小家整合成一个国家
spring实例化对象,实例化单例对象后,去判断是否存在SmartInitializingSingleton类型的对象,存在这个类型的对象,
调用SmartInitializingSingleton类型接口的afterSingletonsInstantiated方法实现逻辑(而xxljob这个小家,实现了自己想要的afterSingletonsInstantiated方法)
代码追溯
XxlJobSpringExecutor 实现afterSingletonsInstantiated方法
afterSingletonsInstantiated方法里调用start方法
XxlJobSpringExecutor extends XxlJobExecutor
implements ApplicationContextAware, SmartInitializingSingleton, DisposableBean{
@Override
public void afterSingletonsInstantiated() {
// init JobHandler Repository
/*initJobHandlerRepository(applicationContext);*/
// init JobHandler Repository (for method)
initJobHandlerMethodRepository(applicationContext);
// refresh GlueFactory
GlueFactory.refreshInstance(1);
// super start
try {
super.start();//注意这里,start()方法
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
star方法是调用父类XxlJobExecutor的start方法
address, ip, port, appname, accessToken这几个属性值就是自己配置的值
public void start() throws Exception {
// init logpath
XxlJobFileAppender.initLogPath(logPath);
// init invoker, admin-client
initAdminBizList(adminAddresses, accessToken);
// init JobLogFileCleanThread
JobLogFileCleanThread.getInstance().start(logRetentionDays);
// init TriggerCallbackThread
TriggerCallbackThread.getInstance().start();
// init executor-server
initEmbedServer(address, ip, port, appname, accessToken);
}