Spring MVC(四)—— quartz實現定時任務


一、簡介

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集成的事情就全部搞定了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM