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>   
         <!-- Spring整合Quartz进行配置遵循下面的步骤: 
      1:定义工作任务的Job
      2:定义触发器Trigger,并将触发器与工作任务绑定
      3:定义调度器,并将Trigger注册到Scheduler
       --> <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) 

 

posted @ 2018-05-24 15:34  取什么昵称呢  阅读(319)  评论(0编辑  收藏  举报