通过Quartz实现定时任务调度

it2022-05-05  132

一、什么是 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号触发。


最新回复(0)