一、timer-context.xml
<?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.xsd">
<!-- 定时器配置 开始 -->
<!-- 第1种: SimpleTriggerFactoryBean 配置 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
<property name="jobDetail">
<bean name="quartzJobDetailFactory" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 实现Job接口的任务类 -->
<property name="jobClass" value="com.enker.manager.timer.QuartzTimer"/>
<!-- 为任务所对应的JobDataMap提供值 -->
<property name="jobDataAsMap">
<map>
<entry key="timerMgr" value-ref="timerMgr"></entry>
</map>
</property>
</bean>
</property>
<!-- 启动(单位毫秒) -->
<property name="startDelay" value="10000"/>
<!-- 重复执行次数 -->
<property name="repeatCount" value="0"></property>
<!-- 执行时间隔间 -->
<property name="repeatInterval" value="3000"/>
</bean>
<!-- 第2种: CronTriggerFactoryBean 配置 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<!-- 使用MethodInvokingJobDetailFactoryBean -->
<bean name="quartzTwoJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<bean id="quartzTwoBean" class="com.enker.manager.timer.QuartzTwo"/>
</property>
<property name="targetMethod" value="test"/>
</bean>
</property>
<!-- 每5秒执行一次 -->
<property name="cronExpression" value="0/5 * * * * ?"/>
</bean>
<!-- 配置SchedulerFactoryBean调度器 -->
<bean id="quartzTimer" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
<property name="quartzProperties">
<map>
<!-- 1 job thread, change this if more jobs added -->
<entry key="org.quartz.threadPool.threadCount" value="30"/>
</map>
</property>
</bean>
</beans>
二、spring核心配置中引入
<!-- 导入定时器配置 -->
<import resource="classpath:timer-context.xml"/>
三、QuartzTimer
<pre name="code" class="html">package com.enker.manager.timer;
import java.util.List;
import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;
import com.enker.core.util.DateUtil;
import com.enker.manager.CoreConst;
import com.enker.manager.tool.util.QuartzUtil;
import com.enker.persistent.model.TimerModel;
import com.enker.service.mgr.TimerMgr;
public class QuartzTimer extends QuartzJobBean {
private Logger log = Logger.getLogger(this.getClass());
private TimerMgr timerMgr;
@Autowired
public void setTimerMgr(TimerMgr timerMgr) {
this.timerMgr = timerMgr;
}
@Override
protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Quartz-定时器启动:"+DateUtil.thisDateTime());
try {List<TimerModel> timerList = timerMgr.findTimerByState(CoreConst.BUS_STATE_START);
for(TimerModel timer :timerList){
QuartzUtil.registJobToScheduler(timer);
}
} catch (Exception e) {
log.error("定时器运行异常!",e);
}
}
}