Spring的定时器

在项目中我需要一个定时器,在每天访问量很低,或者没有人访问的时候,把需要统计的数据进行采集,分析,存储,以便于高层管理者决策,参考.

所以既然我的项目利用了spring.为什么不用spring封装好的定时器呢. 好简单的o.

step1:新建ReportTask.java类. 该类继承了java.util.TimerTask,并且需要复写TimerTask类中的run方法.

Java代码  1.package com.tiros.caredog.cd.util;  
2. 
3.import java.sql.Connection;  
4.import java.sql.PreparedStatement;  
5.import java.util.TimerTask;  
6. 
7.import org.apache.log4j.Logger;  
8.import org.springframework.context.ApplicationContext;  
9.import org.springframework.context.support.ClassPathXmlApplicationContext;  
10. 
11.import com.tiros.caredog.cd.dao.ReportDao;  
12.import com.tiros.caredog.cd.pojo.Report;  
13. 
14.public class ReportTask extends TimerTask {  
15. 
16.    private Logger logger = Logger.getLogger(ReportTask.class);  
17. 
18.    public void run() {  
19.        ApplicationContext context = new ClassPathXmlApplicationContext(  
20.                "applicationContext.xml");  
21.        ReportDao reportDao = (ReportDao) context.getBean("reportDaoImp");  
22.        DateUtil dateUtil = new DateUtil();  
23. 
24.        for (int j = 1; j <= 3; j++) {// 日期  
25.            String day = dateUtil.convert(dateUtil.theDayBeforeSomeDay(j),"yyyy-MM-dd");// 昨天 /前天/ 大前天  
26.            for (int i = 1; i <= 2; i++) {// 版本号  
27.                boolean isBackup = reportDao.checkIsBackup(day, i);  
28.                if (!isBackup) {// 没有备份  
29.                    Report report = reportDao.queryTheDayBeforeSomeDay(day, i);  
30.                    saveReport(report);  
31.                }  
32.            }  
33.        }  
34.    }  
35. 
36.      
37.} 
package com.tiros.caredog.cd.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.TimerTask;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tiros.caredog.cd.dao.ReportDao;
import com.tiros.caredog.cd.pojo.Report;

public class ReportTask extends TimerTask {

private Logger logger = Logger.getLogger(ReportTask.class);

public void run() {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
ReportDao reportDao = (ReportDao) context.getBean("reportDaoImp");
DateUtil dateUtil = new DateUtil();

for (int j = 1; j <= 3; j++) {// 日期
String day = dateUtil.convert(dateUtil.theDayBeforeSomeDay(j),"yyyy-MM-dd");// 昨天 /前天/ 大前天
for (int i = 1; i <= 2; i++) {// 版本号
boolean isBackup = reportDao.checkIsBackup(day, i);
if (!isBackup) {// 没有备份
Report report = reportDao.queryTheDayBeforeSomeDay(day, i);
saveReport(report);
}
}
}
}


}
上面的流程看懂看不懂都无所谓, 反正都是到达规定时间后,自动执行的.

关键点是extends TimerTask. 并且复写run()方法.

然后再applicationContext.xml中配置如下

Java代码  1.<!--spring 定时器 -->  
2.<bean id="quartzClock" 
3.    class="org.springframework.scheduling.quartz.JobDetailBean">  
4.    <property name="jobClass">  
5.        <value>com.tiros.caredog.cd.util.ReportTask</value>  
6.    </property>  
7.</bean>  
8. 
9.<bean id="cronQuartzClock" 
10.    class="org.springframework.scheduling.quartz.CronTriggerBean">  
11.    <property name="jobDetail" ref="quartzClock"></property>  
12.    <property name="cronExpression">  
13.        <value>0 1,2,3,4,5,6,7,8,9,10 1 * * ?</value>  
14.        <!-- 每天凌晨1点1分到1点10分自动备份 -->  
15.        <!--   秒  份  时 日 月 星期 年  -->  
16.        <!-- 区间   *通配/每天/月/年  ?  
17.         -->  
18.    </property>  
19.</bean>  
20. 
21.<bean  
22.    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
23.    <property name="triggers">  
24.        <list>  
25.            <ref bean="cronQuartzClock" />  
26.        </list>  
27.    </property>  
28.</bean>

你可能感兴趣的:(java,spring,sql,log4j,J#)