Spring Quartz 定时任务

Posted 取什么昵称呢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Quartz 定时任务相关的知识,希望对你有一定的参考价值。

最近项目上需要用到定时任务,目前采用spring+quartz架构实现

项目采用Maven管理

需要依赖的Jar包如下

quartz-1.8.5.jar 
commons-logging.jar 
spring-core-3.0.5.RELEASE.jar 
spring-beans-3.0.5.RELEASE.jar 
spring-context-3.0.5.RELEASE.jar 
spring-context-support-3.0.5.RELEASE.jar 
spring-asm-3.0.5.RELEASE.jar 
spring-expression-3.0.5.RELEASE.jar 
spring.transaction-3.0.5.RELEASE.jar 
spring-web-3.0.5.RELEASE.jar 

 

在Spring中使用Quartz有两种方式:

①任务继承QuartzJobBean

②在配置文件中定义需要执行的任务和方法

考虑到需要动态更改任务的执行时间以及动态添加,这里采用第二种方式

下面以项目上的例子作为展示(每隔20秒更新中间表数据)

步骤如下:

①创建业务任务

package cn.o.system.middletable.action;

import java.io.UnsupportedEncodingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import cn.o.system.base.action.BaseAction;
import cn.o.system.middletable.services.IMiddleTableServices;

/**
 * @ClassName: MiddleTableAction
 * @Description: 中间表定时任务action层处理类
 * @author tate zhou
 * @date 2018-5-24
 * @version V1.0
 */

@Component("scheduleAction")
@Scope("prototype")
public class MiddleTableAction extends BaseAction {
    private static final long serialVersionUID = 1L;

    @Autowired
    private IMiddleTableServices middleTableServicesImpl;
    
    
    /**************************************************** spring定时器刷新缓存执行方法 ****************************************************/
    
    /**
     * 
     * @方法:generateMidTableSchedule
     * @描述:间隔30秒对中间表数据全量更新
     * @param: MiddleTableAction
     * @author: tate zhou
     * @date :2018-5-17
     * @version: V1.0
     * @throws UnsupportedEncodingException
     */
    public void generateMidTableSchedule() {
        try {
            middleTableServicesImpl.generateMidTableData();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}

②配置定时任务文件

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
 
<beans>   
         
         <bean id="middleTableAction" class="cn.o.system.middletable.action.MiddleTableAction"></bean>

         <!-- 中间表数据更新任务定时生成 -->
         <bean id="generateMidTableTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
             <property name="targetObject">
                 <ref bean="middleTableAction"/>
             </property>
             <property name="targetMethod">
                 <value>generateMidTableSchedule</value>
             </property>
         </bean>


         <!-- 配置一个触发器  -->
          <bean id="generateMiddleTableRecord" class="org.springframework.scheduling.quartz.CronTriggerBean">
             <property name="jobDetail">
                 <ref bean="generateMidTableTask"/>
             </property>
             <property name="cronExpression">
                 <value>*/20 * * * * ?"</value> 
             </property>
         </bean>


         <!-- 总管理类 如果将lazy-init=‘false‘那么容器启动就会执行调度程序  -->
         <bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
             <property name="triggers">
                 <list>
                     <ref bean="generateMiddleTableRecord"/>
                 </list>
             </property>
         </bean>
         
 </beans>

备注:设置定时任务时间的格式

位置 - 含义- 
1 - 秒(0–59) 
2 - 分(0–59) 
3 - 时(0–23) 
4 - 日(1–31) 
5 - 月(1–12) 
6 - 星期(SUN–SAT or 1–7) 
7 - 年(可选, 1970–2099) 

 










以上是关于Spring Quartz 定时任务的主要内容,如果未能解决你的问题,请参考以下文章

quartz spring 实现动态定时任务

Spring+quartz集群配置,Spring定时任务集群,quartz定时任务集群

spring boot 整合 quartz 集群环境 实现 动态定时任务配置原

Spring与Quartz的整合实现定时任务调度

spring+quartz 实现定时任务二

Spring Boot集成持久化Quartz定时任务管理和界面展示