流量帝框架集成了Quartz Scheduler,并进行了简单的封装
目前流量帝框架支持的任务执行模式有如下几种:
- 按需人工触发执行一次
- 按每天什么时候执行
- 按每间隔多少小时执行
- 按每间隔多少分钟执行
- 按每间隔多少秒执行
- 自定义cron表达式执行
下面就来介绍一下每一种模式的配置方式
前提条件
你需要写一个用来执行批处理任务的任务类, 在项目中继承如下抽象类并实现executeTask方法
com.base.common.util.scheduler.AbstractJob
Sample Code
public class DemoJob extends AbstractJob {
@Override
public void executeTask(JobExecutionContext context) throws JobExecutionException {
//your business logic here
}
}
打开src.resources下的job.xml
<?xml version="1.0" encoding="UTF-8" ?>
<jobs>
</jobs>
开始实现
1 按需人工触发执行一次
修改job.xml配置文件在jobs节点下加入如下配置
<job id="1" name="demoJob" group="default" one-off="true" desc="this is a demo job configuration">
<class-name>com.base.common.util.scheduler.DemoJob</class-name>
</job>
配置内容解释
参数名 | 是否必须 | 解释 |
---|---|---|
id | 是 | 该批处理任务唯一标识,不得与其他job id重复 |
name | 是 | 该批处理任务名称 |
group | 否 | 该批处理任务所属分组,可以为空,默认default |
one-off | 是 | 值必须是true,表示该批处理任务是按需执行一次的任务 |
desc | 否 | 该批处理任务的简单描述 |
class-name | 是 | 具体执行该任务的java类,该类就是要继承AbstractJob并且要实现executeTask方法 |
如何执行任务?
你可以调用如下方法调用任务, job_id 是你配置文件对应的job id
com.base.common.util.scheduler.JobExecutor.executeOneOffJob(<job_id>);
2 按每天什么时候执行
编写实现类并且加入如下配置内容到job.xml,系统启动自动执行
<job id="2" name="demoDailyJob" group="default" one-off="false" desc="this is a demo job configuration">
<class-name>com.base.common.util.scheduler.DemoDailyJob</class-name>
<trigger id="1" name="demoJobTrigger" group="default" type="daily" desc="">
<hour>22</hour>
<minute>50</minute>
</trigger>
</job>
配置内容解释
参数名 | 是否必须 | 解释 |
---|---|---|
id | 是 | 该批处理任务唯一标识,不得与其他job id重复 |
name | 是 | 该批处理任务名称 |
group | 否 | 该批处理任务所属分组,可以为空,默认default |
one-off | 是 | 值必须是false,表示该批处理任务是自动执行的 |
desc | 否 | 该批处理任务的简单描述 |
class-name | 是 | 具体执行该任务的java类,该类就是要继承AbstractJob并且要实现executeTask方法 |
type | 是 | 必须是daily |
hour | 是 | 每天哪个时跑,从0-23中选择 |
minute | 是 | 每天哪个分跑,从0-59选择, 上述sample就表示每天的22:50开始执行任务 |
3 按每间隔多少小时执行
编写实现类并且加入如下配置内容到job.xml,系统启动自动执行
<job id="5" name="demoHourlyJob" group="default">
<class-name>com.base.common.util.scheduler.DemoDailyJob</class-name>
<trigger id="4" name="demoHourlyJobTrigger" type="hourly">
<hour>1</hour>
</trigger>
</job>
配置内容解释
参数名 | 是否必须 | 解释 |
---|---|---|
id | 是 | 该批处理任务唯一标识,不得与其他job id重复 |
name | 是 | 该批处理任务名称 |
group | 否 | 该批处理任务所属分组,可以为空,默认default |
one-off | 是 | 值必须是false,表示该批处理任务是自动执行的 |
desc | 否 | 该批处理任务的简单描述 |
class-name | 是 | 具体执行该任务的java类,该类就是要继承AbstractJob并且要实现executeTask方法 |
type | 是 | 必须是hourly |
hour | 是 | 从1-24中选择,上述sample表示每隔一小时执行任务 |
4 按每间隔多少分钟执行
编写实现类并且加入如下配置内容到job.xml,系统启动自动执行
<job id="4" name="demoMinutelyJob" group="default">
<class-name>com.base.common.util.scheduler.DemoDailyJob</class-name>
<trigger id="3" name="demoMinutelyJobTrigger" type="minutely">
<minute>1</minute>
</trigger>
</job>
配置内容解释
参数名 | 是否必须 | 解释 |
---|---|---|
id | 是 | 该批处理任务唯一标识,不得与其他job id重复 |
name | 是 | 该批处理任务名称 |
group | 否 | 该批处理任务所属分组,可以为空,默认default |
one-off | 是 | 值必须是false,表示该批处理任务是自动执行的 |
desc | 否 | 该批处理任务的简单描述 |
class-name | 是 | 具体执行该任务的java类,该类就是要继承AbstractJob并且要实现executeTask方法 |
type | 是 | 必须是minutely |
minute | 是 | 从1-60选择, 上述sample表示每隔1分钟执行任务 |
5 按每间隔多少秒执行
编写实现类并且加入如下配置内容到job.xml,系统启动自动执行
<job id="3" name="demoSeconlyJob" group="default">
<class-name>com.base.common.util.scheduler.DemoDailyJob</class-name>
<trigger id="2" name="demoSeconlyJobTrigger" type="secondly">
<second>10</second>
</trigger>
</job>
配置内容解释
参数名 | 是否必须 | 解释 |
---|---|---|
id | 是 | 该批处理任务唯一标识,不得与其他job id重复 |
name | 是 | 该批处理任务名称 |
group | 否 | 该批处理任务所属分组,可以为空,默认default |
one-off | 是 | 值必须是false,表示该批处理任务是自动执行的 |
desc | 否 | 该批处理任务的简单描述 |
class-name | 是 | 具体执行该任务的java类,该类就是要继承AbstractJob并且要实现executeTask方法 |
type | 是 | 必须是secondly |
second | 是 | 从1-60选择, 上述sample表示每隔10秒钟执行任务 |
6 自定义cron表达式执行
编写实现类并且加入如下配置内容到job.xml,系统启动自动执行
<job id="6" name="demoCronJob" group="default">
<class-name>com.base.common.util.scheduler.DemoDailyJob</class-name>
<trigger id="5" name="demoCronJobTrigger" type="cron">
<cron>30 * * * * ?</cron>
</trigger>
</job>
配置内容解释
参数名 | 是否必须 | 解释 |
---|---|---|
id | 是 | 该批处理任务唯一标识,不得与其他job id重复 |
name | 是 | 该批处理任务名称 |
group | 否 | 该批处理任务所属分组,可以为空,默认default |
one-off | 是 | 值必须是false,表示该批处理任务是自动执行的 |
desc | 否 | 该批处理任务的简单描述 |
class-name | 是 | 具体执行该任务的java类,该类就是要继承AbstractJob并且要实现executeTask方法 |
type | 是 | 必须是cron |
cron | 是 | cron表达式,任务会按照此cron表达式执行,上述sample表示每隔30秒执行任务 |
相关参考
【Quartz Document】http://www.quartz-scheduler.org/documentation/
【cron表达式参考】
<!-- Sample CRON Expression
秒 分 时 日 月 周 年
"30 * * * * ?" 每半分钟触发任务
"30 10 * * * ?" 每小时的10分30秒触发任务
"30 10 1 * * ?" 每天1点10分30秒触发任务
"30 10 1 20 * ?" 每月20号1点10分30秒触发任务
"30 10 1 20 10 ? *" 每年10月20号1点10分30秒触发任务
"30 10 1 20 10 ? 2011" 2011年10月20号1点10分30秒触发任务
"30 10 1 ? 10 * 2011" 2011年10月每天1点10分30秒触发任务
"30 10 1 ? 10 SUN 2011" 2011年10月每周日1点10分30秒触发任务
"15,30,45 * * * * ?" 每15秒,30秒,45秒时触发任务
"15-45 * * * * ?" 15到45秒内,每秒都触发任务
"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
"0 0/3 * * * ?" 每小时的第0分0秒开始,每三分钟触发一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10点15分0秒触发任务
"0 15 10 L * ?" 每个月最后一天的10点15分0秒触发任务
"0 15 10 LW * ?" 每个月最后一个工作日的10点15分0秒触发任务
"0 15 10 ? * 5L" 每个月最后一个星期四的10点15分0秒触发任务
"0 15 10 ? * 5#3" 每个月第三周的星期四的10点15分0秒触发任务
-->