XxlJob调度中心的启动过程
同样地,分析调度中心也从它的启动过程入手,本文先分析一下启动过程中大概做了什么事情。
XxlJobAdminConfig
该类实现了Spring Framework的InitializingBean接口,所以在该bean被创建之后会被调用afterPropertiesSet方法。
java
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
// 实现InitializingBean中的afterPropertiesSet()方法
@Override
public void afterPropertiesSet() throws Exception {
adminConfig = this;
// 创建调度器对象
xxlJobScheduler = new XxlJobScheduler();
// 初始化调度器
xxlJobScheduler.init();
}
这里是委托给XxlJobScheduler来做的初始化。
XxlJobScheduler
java
xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
public void init() throws Exception {
// init i18n
// 初始化国际化
initI18n();
// admin trigger pool start
// 创建快慢两个线程池
JobTriggerPoolHelper.toStart();
// admin registry monitor run
// 启动服务注册线程
JobRegistryHelper.getInstance().start();
// admin fail-monitor run
// 开启任务失败处理线程
JobFailMonitorHelper.getInstance().start();
// admin lose-monitor run ( depend on JobTriggerPoolHelper )
// 启动任务完成处理线程
JobCompleteHelper.getInstance().start();
// admin log report start
// 日志整理收集
JobLogReportHelper.getInstance().start();
// start-schedule ( depend on JobTriggerPoolHelper )
// 启动基础调度线程和时间轮调度线程
JobScheduleHelper.getInstance().start();
logger.info(">>>>>>>>> init xxl-job admin success.");
}
启动快慢线程池
java
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
private static JobTriggerPoolHelper helper = new JobTriggerPoolHelper();
public static void toStart() {
helper.start();
}
public void start(){
// 创建快线程池,用于处理执行时间短的任务
fastTriggerPool = new ThreadPoolExecutor(
10,
XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax(),
60L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(1000),
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-fastTriggerPool-" + r.hashCode());
}
});
// 创建慢线程池,用于处理执行时间长的任务
slowTriggerPool = new ThreadPoolExecutor(
10,
XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax(),
60L,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(2000),
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "xxl-job, admin JobTriggerPoolHelper-slowTriggerPool-" + r.hashCode());
}
});
}
这两个线程池分别用来调度不同调度时长的任务。
关于其他几部分的内容,这里暂时不分析,因为各种线程的创建及其逻辑耦合在了一起,后面单独写文章来分析。