使用Quartz Scheduler 开发批处理任务

流量帝框架集成了Quartz Scheduler,并进行了简单的封装

目前流量帝框架支持的任务执行模式有如下几种:

  1. 按需人工触发执行一次
  2. 按每天什么时候执行
  3. 按每间隔多少小时执行
  4. 按每间隔多少分钟执行
  5. 按每间隔多少秒执行
  6. 自定义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
croncron表达式,任务会按照此cron表达式执行,上述sample表示每隔30秒执行任务

相关参考

【Quartz Document】http://www.quartz-scheduler.org/documentation/
【cron表达式参考】

<!-- Sample CRON Expression
秒 分 时 日 月 周 年
"30 * * * * ?" 每半分钟触发任务
"30 10 * * * ?" 每小时的1030秒触发任务
"30 10 1 * * ?" 每天11030秒触发任务
"30 10 1 20 * ?" 每月2011030秒触发任务
"30 10 1 20 10 ? *" 每年102011030秒触发任务
"30 10 1 20 10 ? 2011" 2011102011030秒触发任务
"30 10 1 ? 10 * 2011" 201110月每天11030秒触发任务
"30 10 1 ? 10 SUN 2011" 201110月每周日11030秒触发任务
"15,30,45 * * * * ?"15秒,30秒,45秒时触发任务
"15-45 * * * * ?" 1545秒内,每秒都触发任务
"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
"0 0/3 * * * ?" 每小时的第00秒开始,每三分钟触发一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10150秒触发任务
"0 15 10 L * ?" 每个月最后一天的10150秒触发任务
"0 15 10 LW * ?" 每个月最后一个工作日的10150秒触发任务
"0 15 10 ? * 5L" 每个月最后一个星期四的10150秒触发任务
"0 15 10 ? * 5#3" 每个月第三周的星期四的10150秒触发任务
 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值