一、什么是 Quart 框架
quart 是一个开源的作业调度框架,它完全由java写成,它提供了巨大的灵活性而不牺牲简单性。你能用它来为执行一个作业而创建简单的或复杂的调度。
二、maven项目导入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
三、Quartz核心点
1.Job
表示一个任务(工作),要执行的具体内容。
2.JobDetail
任务描述,表示一个具体的可执行的任务调度程序,Job是这个可执行调度程序具体执行的内容.
3.Trigger
代表一个调度参数的配置,指定任务调度的频率时间,合适进行任务调度。
4.Scheduler
代表一个调度容器,一个调度容器可注册多个JobDetail和Trigger,当JobDetail与Trigger组合,就可以被Scheduler容器调度了。
四、测试代码的编写
具体要执行的内容,实现job。
package com.djc.erp.job;
import java.util.Date;
import com.djc.utils.UtilFuns;
public class TestJob {
public void showTime() throws Exception {
System.out.println("定时任务: "+UtilFuns.dateTimeFormat(new Date(), "HH:mm:ss"));
}
}
五、编写Spring与Quartz整合的配置文件
1.创建配置文件application-job.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- 定义一个任务类 -->
<bean id="testJob" class="com.djc.erp.job.TestJob">
</bean>
<!-- 任务类描述 -->
<bean id="testJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--targetObiect:实体类 targetMethod:类里执行的方法-->
<property name="targetObject" ref="testJob"></property>
<property name="targetMethod" value="showTime"></property>
</bean>
<!-- 触发器 -->
<bean id="testTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="testJobDetail"></property>
<!-- Cron表达式,执行时间 -->
<property name="cronExpression" value="0/1 * * * * ? *"></property>
</bean>
<!-- 总管理容器 -->
<bean id="startQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="triggers">
<list>
<ref bean="testTrigger"/>
</list>
</property>
</bean>
</beans>
2.测试结果
每隔一秒显示一次当前时间
六、Cron表达式
<property name="cronExpression" value="0/1 * * * * ? *"></property>
Quartz Cron表达式支持七个域: 秒 分 时 日 月 周 年
名称 | 是否必须 | 允许值 | 特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | ,- * / |
分 | 是 | 0-59 | ,- * / |
时 | 是 | 0-23,- * / | |
日 | 是 | 1-31 | ,- * ? / L W C |
月 | 是 | 1-12 或 JAN-DEC | ,- * / |
周 | 是 | 1-7 或 SUN-SAT | ,- * / L C # |
年 | 否 | 空 或 1970-2099 | ,- * / |
理解特殊字符:
* 星号
指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个 trigger。eg:0/1 * * * * ? *
? 问号
只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为 ? 字符是 “我并不关心在该域上是什么值。” 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。
, 逗号
被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”。
/ 斜杠
用于指定增量。如:“0/15”在秒域意思是每分钟的0,15,30和45秒。“5/15”在分钟域表示每小时的5,20,35和50。
- 中划线
被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”
# 井号
只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。
L 字母
某域上允许的最后一个值。它仅被日和周域支持。当用在日域上,表示的是在月域上指定的月份的最后一天。
W 字母
只允许日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。