使用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 配置格式有問題,