[置顶] Spring web项目使用Quartz定时任务

时间:2021-10-01 07:52:52

Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE  J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来集成 Quartz 

首先在pom文件中引入quratzjar包:

地址为http://mvnrepository.com/artifact/opensymphony/quartz-all/1.6.1

注:1.6.1比较稳定

[置顶]        Spring web项目使用Quartz定时任务


package com.zzh.platform.data.job;



import java.util.Date;
import java.util.List;


import com.zzh.platform.data.entity.PartyBranchInfo;
import com.zzh.platform.data.entity.PartyInvitePv;
import com.zzh.platform.data.redis.PartyDataRedisService;
import com.zzh.platform.data.service.PartyCommonService;
import com.zzh.platform.data.service.PartyInvitedUserService;
import com.zzh.platform.data.service.ServiceFactory;

引入之后定义好要执行的任务类:

以下是要执行的任务类:

/** 
 * ClassName: SyncPartyPageVisitJob
 * Description: 执行的定时任务
 * 
 * @author jupiter@zhongzhihui.com
 * @date: 2016-7-20 下午2:40:57
 */  
public class SyncPartyPageVisitJob {

public void sync(){
PartyCommonService partyCommonService = ServiceFactory.getBean("partyCommonService", PartyCommonService.class);
PartyDataRedisService partyDataRedisService = ServiceFactory.getBean("partyDataRedisService", PartyDataRedisService.class);
PartyInvitedUserService partyInvitedUserService = ServiceFactory.getBean("partyInvitedUserService", PartyInvitedUserService.class);
//
Date time = new Date();
List<PartyBranchInfo> partyBranchInfos = partyCommonService.findAllPartyBranchs();
for (PartyBranchInfo partyBranchInfo : partyBranchInfos) {
long counter = partyDataRedisService.getInvitePageVisit(String.valueOf(partyBranchInfo.getCompanyId()), String.valueOf(partyBranchInfo.getDepartmentId()));

PartyInvitePv partyInvitePv = new PartyInvitePv();
partyInvitePv.setCompanyId(partyBranchInfo.getCompanyId());
partyInvitePv.setDepartmentId(partyBranchInfo.getDepartmentId());
partyInvitePv.setCounter(counter);
partyInvitePv.setTime(time);
try {
partyInvitedUserService.insertPartyInvitePv(partyInvitePv);
} catch (InterruptedException e) {
//
e.printStackTrace();
}


}

}

}

创建完成任务类之后添加配置文件:

两种方式:1.直接在Spring mvc.xml中添加配置 2.创建quartz.xml配置文件,增加配置 

以2为例:

如下代码:

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 增加任务工程,添加定时任务 -->
<ref bean="syncPartyPageVisitJobTrigger" />
</list>
</property>
</bean>

<!-- 创建定时任务类,指定到要执行的任务类 -->
<bean id="syncPartyPageVisitJob" class="com.zzh.platform.data.job.SyncPartyPageVisitJob"></bean>

<!--创建任务调度bean 将创建的任务类添加到任务调度中指定类名和要执行的方法  -->
<bean id="syncPartyPageVisitJobHandler" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 指定的类名 -->
<property name="targetObject" ref="syncPartyPageVisitJob" />
<!-- 指定要执行的任务方法 -->
<property name="targetMethod" value="sync" />
</bean>


<!-- 创建任务触发器bean添加置顶的任务调度bean和执行任务的时间 -->
<bean id="syncPartyPageVisitJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 执行的任务调度的bean -->
<property name="jobDetail" ref="syncPartyPageVisitJobHandler" />
<!-- 执行的时间 -->
<property name="cronExpression" value="0 0/1 * * * ?" />
</bean>



</beans>

添加之后在applocation.xml中引入创建的quartz.xml即配置完成。

3.任务调度的时间参数如下:

        每隔5秒执行一次:*/5 * * * * ?

                 每隔1分钟执行一次:0 */1 * * * ?

                 每天23点执行一次:0 0 23 * * ?

                 每天凌晨1点执行一次:0 0 1 * * ?

                 每月1号凌晨1点执行一次:0 0 1 1 * ?

                 每月最后一天23点执行一次:0 0 23 L * ?

                 每周星期天凌晨1点实行一次:0 0 1 ? * L

                 在26分、29分、33分执行一次:0 26,29,33 * * * ?

                 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?

至此,Spring 中简单使用任务调度完成。

如有任何问题,请联系qq542943220@qq.com