使用Spring 可以很方便的实现定时器任务,我们只需要通过applicationContext.xml 的简单配置就可已实现,前提是现有一个人实现统计功能的java bean;
以下是具体的实现步骤:
第一步:定义实现了统计功能的bean.
<!-- 1. 业务功能类 负责汇总统计-->
<bean id="statTaskService" class="com.hisw.business.service.StatTaskService">
</bean>
第二步:配置任务的代理
<!-- 2. 定义任务,配置代理类-->
<bean id="statTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="statTaskService" />
<property name="targetMethod" value="statDays" />
<property name="concurrent" value="false" />
</bean>
第三步:配置触发器,设置触发时期
<!-- 3, 配置触发器,设置触发 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="statTask" />
<property name="cronExpression" value="0 0/5 * * * ?" />
<!-- <value>0 1 * * * ?</value> -->
</bean>
第四步:配置一个调度器,负责调度管理触发器 调度器只能有一个,触发器和任务可以有多个
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers"> <!-- triggers是Spring定时器的特殊属性 -->
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
整体配置文件如下,只列出有用部分:
<!-- 销售统计汇总定时器 -->
<!-- 1. 业务功能类 负责汇总统计-->
<bean id="statTaskService" class="com.hisw.business.service.StatTaskService">
</bean>
<!-- 2. 定义任务,配置代理类-->
<bean id="statTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="statTaskService" />
<property name="targetMethod" value="statDays" />
<property name="concurrent" value="false" />
</bean>
<!-- 3, 配置触发器,设置触发 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="statTask" />
<property name="cronExpression" value="0 0/5 * * * ?" />
<!-- <value>0 1 * * * ?</value> -->
</bean>
<!-- 4.配置一个调度器用来管理触发器 调度 -->
<bean autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers"> <!-- triggers是Spring定时器的特殊属性 -->
<list>
<ref local="cronTrigger" />
<ref local="crawlerCron1" />
</list>
</property>
</bean>
实现任务的javabean 如下:
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
/**
*实现业务功能的bean
*/
public class StatTaskService extends BaseDao{
public String queryString ="";
public DateFormat format=new SimpleDateFormat("yyyy-MM-dd");
/**
* @author Administrator
*
*/
public void statDays(){
System.out.println("统计任务执行");
}
}
如果初始化错误,一般可能因为配置中cronExpression 配置格式有问题,