任务调度器,
定时任务,保存好后会被放入触发器,这些触发器被存入到数据库,调度器线程扫描,如果有待触发的打开锁,拿到job信息,更改trigger信息,释放锁,返回所有的trigger列表,再 按照时间依次触发,实例化job,进入线程池threadpool 执行,调度完成,队列任务开始启动,然后FIFO .
梳理一下其中的流程,可以表示为:
0.调度器线程run()
1.获取待触发trigger
1.1数据库LOCKS表TRIGGER_ACCESS行加锁
1.2读取JobDetail信息
1.3读取trigger表中触发器信息并标记为"已获取"
1.4commit事务,释放锁
2.触发trigger
2.1数据库LOCKS表STATE_ACCESS行加锁
2.2确认trigger的状态
2.3读取trigger的JobDetail信息
2.4读取trigger的Calendar信息
2.3更新trigger信息
2.3commit事务,释放锁
3实例化并执行Job
3.1从线程池获取线程执行JobRunShell的run方法