Spring MVC(四)—— quartz实现定时任务

时间:2022-07-25 08:00:50

一、简介

Quartz是一个完全由java编写的开源作业调度框架,Quartz作为Java实现的工业标准级别的定时任务调度器,Spring对其提供了无缝的集成,并大大简化了开发工作。

 

一个任务调度器最基本的三个元素是

  • Job(or Task):需要定时处理的事情

  • Trigger: 事件触发时间点(一次性的、固定周期性的、像Linux Cron Jobs 灵活配置的)

  • Scheduler: 调度器

 

  Job与Trigger是一对一的关系,Scheduler与Trigger是一对多的关系。

 

  Quartz的Job对应类为JobDetail,Spring为简化开发提供了工厂包装类MethodInvokingJobDetailFactoryBean类,或使用JobDetailFactoryBean;

 

  Quartz提供两种Trigger,一是SimpleTrigger提供周期性定时触发器,Spring的对工厂类为SimpleTriggerFactoryBean(注:SimpleTriggerBean不支持Quartz2以上版本,已经被SimpleTriggerFactoryBean替代)二是CronTrigger提供像Linux Cron Jobs那样的复杂触发器,触发时间点使用Cron表达式定义,Cron表达式语法可以参考Quartz官方文档,Spring的对应工厂类为CronTriggerFactoryBean(注:CronTriggerBean不支持Quartz2以上版本,已经被CronTriggerFactoryBean替代)

 

  Quartz的Scheduler对应类为Scheduler,Spring对应工厂类为SchedulerFactoryBean

 

二、Spring MVC中的实现

1、依赖的jar包

  Quartz使用的类主要在spring-context-support-4.1.6-RELEASE.jar、quartz-2.1.1.jar中,其他环境所需的jar包参考Spring MVC(一)—— 最小环境搭建中的说明。

 

2、Quartz使用配置applicationContext-task.xml如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3     xmlns:aop="http://www.springframework.org/schema/aop"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans
 5         http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context
 6         http://www.springframework.org/schema/context/spring-context.xsd
 7         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
 8     
 9     <!--- 触发器的bean的设置,在这里我们设置了我们要触发的jobDetail是哪个 -->
10     <bean id="testTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
11         <property name="jobDetail">
12             <bean id="testTimerJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
13                 <property name="jobClass" value="com.ruijie.crazy.timer.TestTimer" />
14                 <property name="group" value="TEST" />
15                 <property name="durability" value="true" />
16             </bean>
17         </property>
18         <property name="cronExpression">
19             <value>0 54 9 * * ?</value>   <!-- 每天9点54分触发一次 -->
20         </property>
21     </bean>
22 
23      <!-- 管理触发器的总设置,管理我们的触发器列表,可以在bean的list中放置多个触发器    -->
24     <bean autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
25         <property name="triggers">
26             <list>            
27                 <ref bean="testTimerTrigger" />                
28             </list>
29         </property>
30         <property name="quartzProperties">
31             <props>
32                 <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop>
33             </props>
34         </property>
35     </bean>
36     
37 </beans>

 

3、定时任务类的java实现:

 1 package com.ruijie.crazy.timer;
 2 
 3 import org.quartz.JobExecutionContext;
 4 import org.quartz.JobExecutionException;
 5 import org.springframework.scheduling.quartz.QuartzJobBean;
 6 
 7 public class TestTimer extends QuartzJobBean {
 8 
 9     @Override
10     protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
11         System.out.println("TestTimer----");        // 实现定时任务的代码
12     }
13 
14 }

  至此,Spring MVC与Quartz集成的事情就全部搞定了。