xxl-job
2021-03-16 23:18:51 26 举报
xxl-job
作者其他创作
大纲/内容
创建两个线程池
JobApiController
XxlJobTrigger.trigger
是
获取所有bean定义然后解析xxlJob
JobRegistryHelper.getInstance().start()
注册执行器
refreshNextValidTime设置下次执行时间
new SpringGlueFactory()
MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum)
refreshNextValidTime
注册类型为EXECUTOR
afterSingletonsInstantiated
XxlJobAdminConfig
循环List<AdminBiz> 开始注册
JobTriggerPoolHelper.toStart()
jobInfo.getTriggerStatus()==1 && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()
ThreadPoolExecutor fastTriggerPool
JobLogFileCleanThread.getInstance().start(logRetentionDays)
obLogReportHelper.getInstance().start()
List<XxlJobRegistry> list
采用线程池的方式去连接数据库,拒绝策略为线程池满了采用当前线程去执行
List<XxlJobGroup> groupList
new ThreadPoolExecutor公用一个线程池
ThreadPoolExecutor callbackThreadPool
List<XxlJobInfo> scheduleList
循环List<AdminBiz>移除adminBiz.registryRemove
setApplicationContext
implements
initAdminBizList
守护线程
start()
移除
移除注册表中60秒的数据
initLogPath
有心跳、空闲心跳、执行任务、kill任务、写日志
开启守护线程
nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS
JobScheduleHelper.getInstance().start()
InitializingBean
adminBiz.registry
removeDead
执行update更新执行器中的连接地址
获取调度失败策略misfireStrategyEnum
开启守护线程,从LinkedBlockingQueue中获取执行的结果,
启动
startRegistry
JobFailMonitorHelper.getInstance().start()
* 主要是报表相关的功能,保存任务执行的日志。并且生成日结报表,并且清理过期日志。支持实时查看运行数据,、 * 如任务数量、调度次数、执行器数量等;以及调度报表,如调度日期分布图,调度成功分布图等。
tostop,开启线程设置为守护线程
//任务结果丢失处理:调度记录停留在 \"运行中\" 状态超过10min,且对应执行器心跳注册失败不在线,则将本地调度主动标记失败 //这一步初始化了回调线程池callbackThreadPool,用来处理执行器任务执行后的回调,同时初始化了monitorThread线程,用来检测回调超时的任务并处理
获取所有的注册表数据
addTrigger()
embedServer.start
adminBiz.callback
hreadPoolExecutor slowTriggerPool
开启守护线程来清理日志
initEmbedServer
获取调度任务
new EmbedHttpServerHandler
创建一个netty服务端
GlueFactory.refreshInstance
XxlJobExecutor
JobTriggerPoolHelper.trigger()
注册
SmartInitializingSingleton当Spring将所有单例 bean 都实例初始化完成以后,如果存在实现SmartInitializingSingleton接口的bean, * 那么Spring还会调用到该bean的afterSingletonsInstantiated()方法。
ApplicationContext
其他情况
adminBiz.registryRemove
doCallback()
1:创建连接池
ApplicationContextAware
TriggerCallbackThread.getInstance().start()
每隔30秒执行一次
调度中心
afterPropertiesSet()
启动失败日志监控线程
ApplicationContextAware属性注入的,但是这个ApplicationContextAware的不同地方在于,实现了这个接口的bean,当spring容器初始化的时候,会自动的将ApplicationContext注入
init()
JobTriggerPoolHelper.trigger
远程服务启动成功
JobCompleteHelper.getInstance().start()
registryOrRemoveThreadPool
执行完毕后回调日志
没有超过5秒 直接执行
Thread scheduleThread
nowTime > jobInfo.getTriggerNextTime()
registJobHandler()
adminBiz.registryapi/registry
initJobHandlerMethodRepository
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候都会执行该方法。
收藏
收藏
0 条评论
下一页