任务调度

任务调度根据存储的方式可以分为内存模式和数据库模式。本项目使用的是数据库模式。前面在导入数据表的时候也提到了,QRTZ_开头的数据表就是用于维护任务调度使用的。

创建定时任务很简单,只需要在cc.mrbird.job.task目录下(或者任何能够被Spring上下文扫描到的路径)创建一个任务类,然后编写需要调度的方法,如:

1
2
3
4
5
6
7
8
9
10
package cc.mrbird.job.task;

import cc.mrbird.common.annotation.CronTag;

@CronTag("testTask")
public class TestTask {
public void test(String params) {
log.info("我是带参数的test方法,正在被执行,参数为:{}" , params);
}
}

其中@CronTag("testTask")表明该类为一个任务调度类,testTask表示其名称。

然后在系统“任务调度→定时任务”菜单中创建一个定时任务配置:

参数说明:

  1. Bean名称对应@CronTag("testTask")中的testTask,表示Spring容器中的Bean的名称;

  2. 方法名称对应上面定义的test方法;

  3. 方法参数指定了方法test(String params)参数params的值为mrbird;

  4. cron表达式用于指定任务调度的规则,这里表示每隔1秒触发;

  5. 备注用于简单描述该调度方法的作用。

新增后的调度任务为暂停状态。任务状态分为暂停和正常。

在“定时任务”页面的右上角有三个和任务状态相关的按钮,这里简单描述下它们的作用:

  1. 立即执行任务:选中任务点击该按钮,被选中的任务会马上执行。如果任务是暂停状态的,那么只执行一次;如果任务是正常状态的,则开始安装cron表达式规则持续的调用该任务;

  2. 暂停任务:将任务的状态变更为暂停状态;

  3. 恢复任务:将任务的状态变更为正常状态。恢复正常状态的任务并不会马上就开始持续调度,只有当系统重启或者点击立即执行后才会进行持续调度。

下面是testTasktest方法持续调度的日志:

控制台:

1
2
3
4
5
6
7
8
9
10
11
14:42:56.070 sms [pool-43-thread-1] INFO  cc.mrbird.job.task.TestTask - 我是带参数的test方法,正在被执行,参数为:mrbird
14:42:56.071 sms [MyScheduler_Worker-2] INFO cc.mrbird.job.util.ScheduleJob - 任务执行完毕,任务ID:1 总共耗时:2 毫秒
14:42:57.143 sms [MyScheduler_Worker-3] INFO cc.mrbird.job.util.ScheduleJob - 任务准备执行,任务ID:1
14:42:57.143 sms [pool-44-thread-1] INFO cc.mrbird.job.task.TestTask - 我是带参数的test方法,正在被执行,参数为:mrbird
14:42:57.144 sms [MyScheduler_Worker-3] INFO cc.mrbird.job.util.ScheduleJob - 任务执行完毕,任务ID:1 总共耗时:0 毫秒
14:42:58.139 sms [MyScheduler_Worker-4] INFO cc.mrbird.job.util.ScheduleJob - 任务准备执行,任务ID:1
14:42:58.139 sms [pool-45-thread-1] INFO cc.mrbird.job.task.TestTask - 我是带参数的test方法,正在被执行,参数为:mrbird
14:42:58.139 sms [MyScheduler_Worker-4] INFO cc.mrbird.job.util.ScheduleJob - 任务执行完毕,任务ID:1 总共耗时:0 毫秒
14:42:59.059 sms [MyScheduler_Worker-5] INFO cc.mrbird.job.util.ScheduleJob - 任务准备执行,任务ID:1
14:42:59.059 sms [pool-46-thread-1] INFO cc.mrbird.job.task.TestTask - 我是带参数的test方法,正在被执行,参数为:mrbird
14:42:59.060 sms [MyScheduler_Worker-5] INFO cc.mrbird.job.util.ScheduleJob - 任务执行完毕,任务ID:1 总共耗时:1 毫秒

任务调度日志页面:

对于不是很了解cron表达式含义的同学可以参考:Quartz guide


© 2017 - 2018  MrBird & Hosted by Coding Pages