Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来集成 Quartz 。
首先在pom文件中引入quratzjar包:
地址为http://mvnrepository.com/artifact/opensymphony/quartz-all/1.6.1
注:1.6.1比较稳定
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