关于spring 定时任务大概有2中
从配置上来说 大概分为2中1中是 在xml中配置 一堆东西,另外一种是基于注解的
我要说的是关于注解的 第一种从网上可以看到好多
说一下原由,
我的整个程序是都是基于注解的,最近要加一个新需求是做统计报表的。每天统计一次即可,其实python挺好 可惜不会,故就使用spring 的定时任务了
因为在跑任务过程中用到了dao ,而且我的dao都是基于注解的,所以就整个沿用注解了
先看下类
1接口
/***
* * @author skyyan * */ public interface IStatiticsTask { public void execute() throws Exception;}
2.实现
package service.impl.task;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;/***
* 统计任务 * @author skyyan * */ @Component("scheduledTaskManager") public class StatiticsTask implements IStatiticsTask{ @Autowired private IStatiticsService statiticsService; private static int cnt=0; public void excuteJob() throws Exception{/***
* TODO 替换成自己的逻辑 */
System.out.println("statiticsService="+statiticsService);
System.out.println("**************************"); System.out.println("-------任务StatiticsTask 开始执行["+(cnt)+"]开始-----------"); String currentDate=ELFunction.getDateDec(new Date(), 1); System.out.println("currentDate=="+currentDate); statiticsService.addTotalStatitics(currentDate); System.out.println("-------任务StatiticsTask 开始执行["+(cnt)+"]结束-----------"); System.out.println("**************************"); cnt++; } @Override // @Scheduled(cron="0 0 1 * * ?")每天凌晨1点 // @Scheduled(cron="0/5 * * * * ?")//每5秒钟 @Scheduled(cron="0 0 1 * * ?")//每天凌晨1点执行一次;主要在这里 public void execute() throws Exception { try { excuteJob(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }}
}
-------------
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=" xmlns:xsi=" xmlns:p=" xmlns:context=" xmlns:mvc=" xmlns:util=" xmlns:task="xsi:schemaLocation="
" default-init-method="init" default-autowire="byName"><!-- 定时开始 --> <task:annotation-driven/> <context:component-scan base-package="service.impl.task"/> <!-- 定时 结束--> </beans>