cto有如下需求:
要求各team leader(每人负责网站的一个行业栏目)将各项目部的数据从后台管理查询汇总并使用excel整理以附件形式发送至cto(发送时间不限),貌似数据量很大,自己统计要疯,于是乎,写定时器执行无疑是个好选择,那我的需求就很简单了,
首先,由于是门户网站,数据量访问较大,所以只能选择深夜“悄悄地”。。。。。
1、每天凌晨3点钟启动“数据提取”timer,其负责 :
1) 分类汇总数据;
2) 持久化到数据库;
2、每天凌晨4点钟启动“发送邮件”timer,主要用来将数据库里汇总好的相应数据提取并e-mail给cto
timer关键代码:
我选择使用annotation方式,代码简单轻巧,
1) 在spring配置文件的xmlns和xsi:schemaLocation声明处分别添加
task="http://www.springframework.org/schema/task" 和 http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
2) 开启task任务扫描注解
<task:annotation-driven/>
3) 开启annotation,并配置扫描位置
<context:annotation-config /> <context:component-scan base-package="com.sina" />
4) 接口:SpringTimerService
/**
* spring 定时器接口
* @author Jar chang
*/
public interface SpringTimerService {
/**
* 数据提取定时器
*/
public void runDataCollectionTimer();
/**
* 发送邮件定时器
*/
public void runSendStatisticsEmailTimer();
}
5) service实现
@Component
public class SpringTimerServiceImpl implements SpringTimerService{
@Resource
private SpringTimerDao springTimerDaoImpl;
@Override
@Scheduled(cron="0 0 3 * * ?")
//此处配置定时器具体的生效时间,关于cron表达式很简单:请百度
public void runDataCollectionTimer() {
springTimerDaoImpl.runCollection();
//。。。。代码略
}
@Override
@Scheduled(cron="0 0 4 * * ?")
public void runSendStatisticsEmailTimer() {
springTimerDaoImpl.runSendEmail();
//。。。。代码略
}
}
6) dao层是具体的从数据库取数据以及发送邮件的代码,网上一大堆,就不多做声明了#11
需要注意的地方:
1) 定时器任务方法不能有返回值
2) spring的@Scheduled注解必须写在实现类上
3) 定时任务不能启动请检查spring配置文件中的default-lazy-init="true",将其修改为false,因为默认懒
加载的情况定时器不会执行
本文介绍如何使用Spring框架实现自动化数据提取和邮件发送的定时任务,通过配置定时器,实现深夜运行数据提取与汇总,然后定时发送邮件至指定接收者。
128

被折叠的 条评论
为什么被折叠?



