9.10 定时任务框架初步了解
阅读框架实现方式,有助于更好的使用框架,理解设计思想。
一、基本使用
了解定时任务的基本使用
1.1 引入框架源码
1.2 调用SchedulerManager创建定时任务
该类是定时任务的线程管理工具,可通过此类提供的方法,创建定时任务,并加入线程队列
schedulerManager.schedule("activitybegin-job", "0 0/5 * * * ?", new ScheduledJob() {
@Override
private void run(){
}; // 业务代码
@Override
private void terminate(){
}; // 终止线程方式,应用于线程引擎终止时每个线程的销毁方式
}
调用schedulerManager.schedule方法创建一个定时任务线程,该方法需要传递三个参数
- jobName:定时任务的名称,后缀要与配置的job.type一致(application.properties)
- crontab表达式:周期执行模式
- ScheduleJob:线程任务(在定时任务线程中被执行),内部需要实现run、terminate两个方法,run内写业务代码、terminate内写终止工作线程方式
1.3 crontab表达式
通过书写crontab表达式,可以指定线程周期执行的模式,比如每隔5秒执行一次,每个小时的前五分钟的每5秒执行一次……
如上 “0 0/5 * * * ?” 代表的是每星期的每一天,每隔五分钟执行一次。
crontab表达式由一组连续的数字或字符组成,他们之间通过一个空格分隔。从左到右依次代表
秒 分钟 小时 天 月份 每周的第几天 年(可以省略)
以下是标识范围的的字符形式,0/x表示的是间隔,执行周期为x。 * 代表所有的时间段。 - 代表在什么什么范围内。?代表任意。
二、整体分析:类结构分析
理解类结构,是理解框架细节的前提。
- ScheduledJob:线程任务接口,我们的定时任务业务就是写在这个实现类里
- Scheduler:定时任务引擎,它包含一个内部类ScheduledJobThread,作为我们线程任务执行的载体。内部维护了一个ScheduledJobThread集合。
- SchedulerManager:根据配置,决定是否初始化Scheduler、但前定时任务线程的名字是否合法。它是我们直接操作的对象,可以通过它来创建定时任务。
- JobConfig:配置类,用于获取job前缀的配置属性。配置属性包括type:工作类型,whiteList:白名单。
- CronExpression:定时异常类。
三、具体分析:框架逻辑分析
按照程序执行流程,来理解框架的逻辑。
3.1 SchedulerManager
内部维护的属性:
- JobConfig:配置信息
- EnvironmentService:开发环境service,用于判断当前开发环境。
- mqEnabled:是否开启消息队列
- Scheduler:定时任务引擎
初始化动作:
@PostConstruct
public void init()
{
boolean jobSchedule = "job".contentEquals(config.getType());