Quartz

一、概念

Quartz是OpenSymphony开源组织在 job scheduling领域又一个开源项目

它可以与JavaSE、JavaEE应用程序相结合,也可以单独使用

Quartz是开源且具有丰富特性的任务调度库,能够集成任何Java应用

任务job:
job就是你想要实现的任务类,每一个job必须实现org.quartz.job接口,且只需实现接口定义的execute()方法

触发器Trigger:
Trigger是执行任务的触发器,比如你想每天定时7点闹钟,Trigger将会设置7点执行该任务。
Trigger主要包含两种:SimpleTrigger和CronTrigger

调度器Scheduler:
将任务和触发器整合起来,负责基于Trigger设定的时间来执行job

二、常用API

  1. Scheduler:用于与调度程序交互的主程序接口
  2. Job:任务类
  3. JobDetail:是通过JobBuilder类创建的Job实例
  4. JobDataMap:在Job实例执行的时候,可以使用的数据集合
  5. Trigger:任务的触发器
  6. JobBuilder:任务创建器
  7. Trigger:触发器创建器
  8. JobListener、TriggerListener、SchedulerListener:监听器

三、入门案例

基于spring和quartz整合

第一步:创建maven工程,导入spring和quartz相关依赖

<!--引入Quartz的依赖-->
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.3</version>
</dependency>
<dependency>
    <groupId>ort.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.3</version>
</dependency>

第二步:创建任务类

public class MyJob {
    public void run() {
        System.out.println("任务执行了---------" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
}

第三步:在spring配置文件中配置任务类

<bean id="myJob" class="com.orchid.quartz.MyJob"></bean>

第四步:在spring配置文件中配置任务类实例

<!--配置jobDetail-->
<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <!--用到的job实例-->
    <property name="targetObject" ref="myJob"/>
    <!--job实例中的方法-->
    <property name="targetMethod" value="run"/>
</bean>

第五步:在spring配置文件中配置触发器

<!--配置触发器Trigger-->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
    <property name="jobDetail" ref="myJobDetail"/>
    <property name="cronExpression">
        <!--每5秒执行一次-->
        <value>0/5 * * * * ?</value>
    </property>
</bean>

第六步:在spring配置文件中配置调度器

<!--配置scheduler工厂-->
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="myTrigger"/>
        </list>
    </property>
</bean>

第七步:加载spring配置文件,创建spring工厂

public class Test {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

四、cron表达式

在这里插入图片描述
星号(*) 指示着你想在这个域上包含所有合法的值。问号(?)只能用在日和周域上,但是不能在这两个域上同时使用。逗号 (,) 是用来在给某个域上指定一个值列表的。斜杠 (/) 是用于时间表的递增的。中划线 (-) 用于指定一个范围。L 说明了某域上允许的最后一个值。它仅被日和周域支持。W 字符代表着平日 (Monday-Friday),并且仅能用于日域中。它用来指定离指定日的最近的一个平日。#字符仅能用于周域中。它用于指定月份中的第几周的哪一天。

0 0 12 * * ?
秒域:0,分域:0,时域:12,天月周无限制,年域:无
在今年的每天12点运行

0 15 10 ? * *
秒域:0,分域:15,时域:10,天月周无限制,年域:无
在今年的每天10:15运行

0 15 10 * * ? 2008
秒域:0,分域:15,时域:10,天月周无限制,年域:2008
在2008年的每天10:15运行

0 * 14 * * ?
秒域:0,分域:无限制,时域:14,天月周无限制,年域:无
在今年的每天14点到15点之间每分钟运行一次,开始于14:00,结束于14:59。
不包括15点,因为15点的时域是15,不是14

0 0/5 14 * * ?
秒域:0,分域:递增步数5,时域:14,天月周无限制,年域:无
在今年的每天14点到15点每5分钟运行一次,开始于14:00,结束于14:55。

0 0/5 14,18 * * ?
秒域:0,分域:递增步数5,时域:14和18,天月周无限制,年域:无
在今年的每天14点到15点每5分钟运行一次及18点到19点每5钟也运行一次。

0 0-5 14 * * ?
秒域:0,分域:0到5内(0.1.2.3.4.5),时域:14,天月周无限制,年域:无
在今年的每天14:00点到14:05,每分钟运行一次。

0 10-44 14 ? 3 WED
秒域:0,分域:10到44内,时域:14,天域:无限制,月域:3,周域:WED,年域:无
在今年的3月每周三的14:10到14:44,每分钟运行一次。

0 15 10 ? * MON-FRI
秒域:0,分域:15,时域:10,天月无限制,周域:W,年域:无
在今年的每周平日的10:15分运行。

0 15 10 15 * ?
秒域:0,分域:15,时域:10,天域:15,月周无限制,年域:无
在今年的每月15日10:15分运行。

0 15 10 L * ?
秒域:0,分域:15,时域:10,天域:L,月周无限制,年域:无
在今年的每月最后一天10:15分运行。

0 15 10 ? * 6#3
秒域:0,分域:15,时域:10,天月无限制,周域:6#3,年域:无
每月第三个星期五的10:15分运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值