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

  • 相关阅读:
    windows 全局安装 composer【转】
    CentOS7使用firewalld打开关闭防火墙与端口
    转 Page Object模式
    转 用SQL语句,删除掉重复项只保留一条
    转 什么是Mbps、Kbps、bps、kb、mb及其换算和区别
    转 使用Python的logging.config.fileConfig配置日志
    转 zookeeper,dubbo和Nginx的区别
    转 lsof命令详解
    Fatal Error -26000: Not enough memory (12320 bytes) for “new buffer in LrwSrvNetTaskIt 问题解决及lr脚本心得
    Action.c(28): Error -27796: Failed to connect to server "xxxx": [10060] Connection timed out
  • 原文地址:https://www.cnblogs.com/ypf1989/p/5552426.html
Copyright © 2020-2023  润新知